Vishnu Vardhan M Ответов: 1

Как сгенерировать скрипт вставки из таблицы данных в C# и сохранить его в текстовом файле?


У меня есть данные листа excel, и я хочу сгенерировать скрипт вставки из листа excel. Я получаю данные листа excel в таблицу данных, но не знаю, как сгенерировать скрипт вставки из таблицы данных и сохранить его в текстовом файле с помощью кода c#.
Я хочу автоматически отображать имена столбцов с помощью цикла, но не записывать каждое имя столбца в команду print.

пожалуйста, помогите мне решить эту проблему

Что я уже пробовал:

protected void btnconverter_Click(object sender, EventArgs e)
        {
            if (btnFleUpld.HasFile)
            {
                string FileName = Path.GetFileName(btnFleUpld.FileName);
                string Extension = Path.GetExtension(btnFleUpld.PostedFile.FileName);
                //string fileExtension = filename.Substring(filename.LastIndexOf("."));
                string FolderPath = ConfigurationManager.AppSettings["FolderPath"];
                string Filepath = FolderPath + FileName;
                // fileUpld.SaveAs(Server.MapPath(Filepath));
                btnFleUpld.SaveAs(Server.MapPath("~/fileupload/" + FileName));


                Import_To_Grid(Filepath, Extension);//, rbHDR.SelectedItem.Text
            }

        }




        private void Import_To_Grid(string Filepath, string Extension)//, string isHDR
        {
            OleDbConnection oledbConn = new OleDbConnection();
            if (Path.GetExtension(Filepath) == ".xls")
            {
                oledbConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Filepath + ";Extended Properties=Excel 12.0;");
            }

            oledbConn.Open();
            OleDbCommand cmd = new OleDbCommand(); ;
            OleDbDataAdapter oleda = new OleDbDataAdapter();

            DataTable dt = new DataTable();
            //DataSet ds = new DataSet();

         

          
            cmd.Connection = oledbConn;
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "SELECT * FROM [PsslInOrders$]";
            oleda = new OleDbDataAdapter(cmd);
            oleda.Fill(dt);



            StreamWriter swExtLogFile = new StreamWriter("D:/fileupload/vishnu2.txt", true);
            swExtLogFile.Write(Environment.NewLine);
            //foreach (DataRow row in dt.Rows)
                for (int i = 0; i <= dt.Rows.Count-1;i++ )
                {
                    for (int k = 0; k < dt.Columns.Count; k++)
                    {
                        string ColName = dt.Columns[k].ColumnName.ToString();
                       
                       
                    }
               
            swExtLogFile.Write(" INSERT [dbo].[Orders] ([OrderType], [OrderNumber], [Status], [Date], [RequestedOn], [CustomerID], [Location]) VALUES ( '" + dt.Rows[i]["OrderType"].ToString().Trim() + "','" + dt.Rows[i]["OrderNumber"].ToString().Trim() + "','" + dt.Rows[i]["Status"].ToString().Trim() + "','" + dt.Rows[i]["Date"].ToString().Trim() + "','" + dt.Rows[i]["RequestedOn"].ToString().Trim() + "','" + dt.Rows[i]["CustomerID"].ToString().Trim() + "','" + dt.Rows[i]["Location"].ToString().Trim() + "')");
                   
  
                }
            swExtLogFile.Write("*****END OF DATA****" + DateTime.Now.ToString());
            swExtLogFile.Flush();
            swExtLogFile.Close();
        }

RickZeeland

Вместо строки для имен столбцов вы также можете использовать число.

Vishnu Vardhan M

будет полезно, если вы предоставите код, используя число вместо строки.Я попробовал по номеру, но не получил результата.

1 Ответов

Рейтинг:
0

RickZeeland

Вместо dt. Rows[i] ["OrderType"] вы можете использовать, например,

dt.Rows[i][2]

Вместо swExtLogFile.Write Я бы использовал:
swExtLogFile.WriteLine
В противном случае ваши строки не будут иметь окончаний.

Вместо: string ColName = dt. Columns[k].Имя столбца.Метод toString();
string[] ColNames = New String[dt.Columns.Count];
for (int k = 0; k < dt.Columns.Count; k++)
{
  ColNames[k] = dt.Columns[k].ColumnName.ToString();
}
После этого используйте ColNames в инструкции Insert.


Vishnu Vardhan M

tq для вашего ans, он работает нормально, но если у меня больше столбцов, чем мне нужно, чтобы ввести имя каждого столбца & num в запросе Insert.

swExtLogFile.Напишите ("INSERT [dbo].[Заказы] ([OrderType], [Номер Заказа], [Статус], [Дата], [RequestedOn], [Кодклиента], [Место]) Значения ('" + dt. Rows[i][0].ToString (). Trim ()+"', '" + dt.Rows[i][1].ToString (). Trim ()+"', '" + dt.Rows[i][2].ToString (). Trim ()+"', '" + dt.Rows[i][3].ToString (). Trim ()+"', '" + dt.Rows[i][4].ToString (). Trim ()+"', '" + dt.Rows[i][5].ToString (). Trim ()+"', '" + dt.Rows[i][6].ToString (). Trim ()+ "')");

Я хочу отображать эти столбцы автоматически, используя код без ввода текста для каждого нового листа. пожалуйста, предоставьте любой код или любое предложение, которое будет читать имена столбцов таблицы данных и печатать их в моем текстовом файле.

Vishnu Vardhan M

У меня есть 70 столбцов в моей таблице данных.Мне нужно написать длинный запрос вставки для каждой новой таблицы с моим кодом.

RickZeeland

Нет необходимости, вы можете сделать цикл for, который добавляет столбцы. Лучше всего использовать StringBuilder, если у вас много столбцов.