Рейтинг:
10
Manas_Kumar
Шаг 1: Создайте статический метод, который будет принимать datatable в качестве параметра и извлекать все coulmns, его тип данных. Затем он генерирует sql quries. Вот этот метод:
public static string CreateTABLE(DataTable table)
{
string sqlQuery;
sqlQuery = "CREATE TABLE " + table.TableName + "(";
for (int i = 0; i < table.Columns.Count; i++)
{
sqlQuery += "\n [" + table.Columns[i].ColumnName + "] ";
string columnType = table.Columns[i].DataType.ToString();
// You will get different data type in C#(you need to change it SQLServer):Boolean,Byte,Char,DateTime,Decimal,Double,Int16,Int32,Int64,SByte,Single, String,TimeSpan,UInt16,UInt32,UInt64
switch (columnType)
{
case "System.Int32":
sqlQuery += " int ";
break;
case "System.Int64":
sqlQuery += " bigint ";
break;
case "System.Int16":
sqlQuery += " tinyint ";
break;
case "System.Decimal":
sqlQuery += " decimal ";
break;
case "System.DateTime":
sqlQuery += " datetime ";
break;
case "System.String":
default:
sqlQuery += string.Format(" nvarchar({0}) ", table.Columns[i].MaxLength == -1 ? "max" : table.Columns[i].MaxLength.ToString());
break;
}
if (table.Columns[i].AutoIncrement)
sqlQuery += " IDENTITY(" + table.Columns[i].AutoIncrementSeed.ToString() + "," + table.Columns[i].AutoIncrementStep.ToString() + ") ";
if (!table.Columns[i].AllowDBNull)
sqlQuery += " NOT NULL ";
sqlQuery += ",";
}
return sqlQuery.Substring(0, sqlQuery.Length-1) + "\n)";
}
// Call the method
DataTable yourDataTableObj = new DataTable();
string sqlQuery = CreateTABLE(yourDataTableObj);
Шаг 2: Как только вы вызовете метод, вы получите SQL-запрос. Собрать его и запустить его в SQL сервер вручную, или вы можете выполнить с помощью ADO.NET
NANDKUMAR GAIKWAD
спасибо за предложение.
и я здесь новичок ... но это не оправдание..
ваш ответ просто потрясающий..
я посылаю вам свой код и говорю, что с ним не так
[no name]
В чем заключается ваша реальная проблема: либо сгенерировать базу данных из схемы Tally, либо привязать данные к выпадающему списку?
NANDKUMAR GAIKWAD
нет никаких проблем с привязкой я пытаюсь получить схему из моего приведенного ниже кода
строке source = "порт=9000;водитель=водитель вяжутся с ODBC;сервер={(по местному)}";
Объекта odbcconnection, кон = нового объекта odbcconnection(источник);
против.Открыть();
DataTable dt = новый DataTable();
string[] restrictions = новая строка[1];
dt = con.GetSchema("Таблицы");
База данных db = новая база данных();
DropDownList1.Источник данных = ДТ;
DropDownList1.DataTextField = "Имя_таблицы";
DropDownList1.DataValueField = "Имя_таблицы";
DropDownList1.DataBind();
я хочу, как создать таблицу в sql server 2008 с этой схемой таблицы и там имя столбца и там тип данных
но когда я использую ваш код я получаю информацию о датируемой схеме
[no name]
Если вы получаете DataTable и его столбцы правильно, то следуйте моему ответу, чтобы сгенерировать SQL-запрос. Как только вы получите SQL-запрос, который вам нужно выполнить в базе данных.
Правильно ли вы получаете схему таблицы из переменной con?
NANDKUMAR GAIKWAD
да, я получаю правильную схему из пробованного кода..
но когда я пытаюсь для одной таблицы или нескольких таблиц он не генерирует скрипт
[no name]
Что это значит: но когда я пытаюсь создать одну таблицу или несколько таблиц, он не генерирует скрипт
NANDKUMAR GAIKWAD
я использую ваш код следующим образом
охраняемых недействительными DropDownList1_SelectedIndexChanged(объект отправителя, EventArgs в электронной)
{
//Label2.Text = "Имя Таблицы :" + Преобразовать.Метод ToString(Список Listbox1.Элемент.Текст);
Label2.Text = "имя таблицы:" + преобразовать.ToString(DropDownList1.SelectedItem.Text);
//DataSet objds = fetchTallyTableContent(Convert.Метод ToString(Список Listbox1.Элемент.Текст));
DataSet objds = fetchTallyTableContent(Convert.ToString(DropDownList1.SelectedItem.Text));
GridView2.Источник данных = objds;
GridView2.DataBind();
// Вызов метода
//DataTable yourDataTableObj = новый DataTable();
//string sqlQuery = CreateTABLE(yourDataTableObj);
DataTable dt = новый DataTable(Convert.ToString(DropDownList1.SelectedItem.Text));
строка sqlQuery = CreateTABLE(dt);
текстовое поле textbox1.Текст = SQL-запрос;
}
публичный набор данных fetchTallyTableContent(строка tblName)
{
//string query = "SELECT * FROM Techweb.TallyUser." + tblName + "" + tblName;
string query = "SELECT * FROM DatavisionITC.TallyUser." + tblName + "" + tblName;
строке source = "порт=9000;водитель=водитель вяжутся с ODBC;сервер={(по местному)}";
Объекта odbcconnection, кон = нового объекта odbcconnection(источник);
OdbcCommand cmd = new OdbcCommand(query, con);
против.Открыть();
OdbcDataAdapter da = новый OdbcDataAdapter(запрос, con);
DataSet ds = новый набор данных();
да.Заполнить(ДС);
против.Закрывать();
возврат ДС;
}
публичная статическая строка CreateTABLE(DataTable table)
{
строка SQL-запрос;
sqlQuery = "создать таблицу" + Таблица.Имятаблицы + "(";
for (int i = 0; i < table.Столбцы.Граф; i++)
{
sqlQuery += "\n [" + таблица.Колонки[i].Имя_столбца + "] ";
строка columnType = таблица.Столбцы[i].тип данных.Метод toString();
// Вы получите разные типы данных в C#(необходимо сменить SQL сервер):boolean значение,байт,символ,даты и времени,десятичных,двухместная,типа INT16,int32 и int64 значение типа,типа sbyte,один, строки,времени,типа uint16,тип uint32,uint64 в
переключатель (columnType)
{
Система дело ".Типа int32":
SQL-запрос += " инт ";
перерыв;
Система дело ".Типа int64":
SQL-запрос += " значение типа bigint ";
перерыв;
Система дело ".Типа INT16":
sqlQuery += " tinyint ";
перерыв;
кейс "система.Десятичный":
sqlQuery += " десятичное число ";
перерыв;
кейс "система.значение datetime":
SQL-запрос += " датавремя ";
перерыв;
кейс "система.Строка":
по умолчанию:
sqlQuery += строка.Формат(" nvarchar({0}) ", таблица.Столбцы[i].MaxLength == -1 ? "max" : таблица.Столбцы[i].максимальная длина.Метод toString());
перерыв;
}
если (табл.Колонки[i].Автоинкремент)
sqlQuery += " IDENTITY(" + таблица.Колонки[i].Автоинкрементное семя.ToString() + "," + таблица.Колонки[i].AutoIncrementStep.Метод toString() + ") ";
если (!таблица.Колонки[i].AllowDBNull)
SQL-запрос += " не нуль ";
SQL-запрос += ",";
}
возвращает SQL-запрос.Подстрока(0, sqlQuery.Длина - 1) + "\n)";
}
}
я получаю имя таблицы, но теперь проблема в том, что выходные данные выглядят следующим образом
где именно я ошибаюсь Я не могу выяснить
"Создать состояние таблицы
)"
это и есть выход
[no name]
Похоже, проблема с таблицей.Столбцы.Подсчитайте, можете ли вы просто отладить и посмотреть, какое значение вы получаете.
NANDKUMAR GAIKWAD
да я отлаживаю и получаю только вывод
"Создать таблицу таблицы
)"
это вых
могу ли я отправить вам полный код с помощью aspx
что вы можете отладить свою сторону
я не могу выяснить точную проблему
NANDKUMAR GAIKWAD
я сделал это я пришлю тебе то что сделал
[no name]
В чем же на самом деле заключалась проблема?
NANDKUMAR GAIKWAD
у меня есть вопрос Манас возможно ли что мы можем вставить данные в базу данных без использования оператора insert
потому что прямо сейчас я создаю базу данных в соответствии с вашим ответом но теперь мне нужно вставить в базу данных без вставки statment
[no name]
да, мы можем сделать это через массовое копирование SQL. Следуйте по ссылке ниже:
http://www.codeproject.com/Articles/18418/Transferring-Data-Using-SqlBulkCopy
http://dotnetmentors.com/c-sharp/bulk-upload-into-sql-server-using-sqlbulkcopy-and-c-sharp.aspx
NANDKUMAR GAIKWAD
спасибо Манас я пытаюсь от тебя ответ
NANDKUMAR GAIKWAD
общее резюме того, что я здесь сделал
1) получить схему базы данных tally
2) Создайте скрипт структуры таблицы в соответствии с вашим кодом
3) для этой структуры таблицы я использовал вашу ссылку массового копирования и сохранения базы данных на sql server(здесь я одновременно использовал создание таблицы и копию culk).
спасибо за вашу помощь это никогда не было возможно что я мог бы сделать это
[no name]
Добро пожаловать приятель :) Надеюсь, вы выполнили великую задачу.
NANDKUMAR GAIKWAD
это все для вас ... сэр Джи
Member 13766988
Я не могу получить схему для базы данных tally
строке source = "порт=9000;водитель=водитель вяжутся с ODBC;сервер={(по местному)}";
Объекта odbcconnection, кон = нового объекта odbcconnection(источник);
против.Открыть();
После исключения этих строк кода.Я получаю исключение, как указано ниже,
Ошибка [IM002] [Microsoft][ODBC Driver Manager] имя источника данных не найдено и драйвер по умолчанию не указан
Может ли кто-нибудь, пожалуйста, помочь мне попробовать это решение