Member 11306487 Ответов: 2

Вставка данных в SQL server через файл excel с помощью SQL-запроса


Здравствуйте может ли кто нибудь помочь мне я развиваюсь Asp.Net приложение, в котором я хочу вставить данные в базу данных через лист excel.Для этого я использую следующий код, который работает хорошо.но его вставляют данные непосредственно в базу данных.я хочу добавить SQL-запрос, который указывает те данные, которые я вставляю..но я не знаю, где и как я использую SQL-запрос, который вставляет данные в базу данных
<body>
    <form id="form1" runat="server">
    <div>
    <asp:FileUpload ID="FileUpload1" runat="server" />
    <asp:Button Text="Upload" OnClick = "Upload" runat="server" />
    <asp:Label Text="" ID="label1" runat="server" />
    
  </div>
    </form>
</body>


Код для кнопки

protected void Upload(object sender, EventArgs e)
        {
            if (FileUpload1.HasFile)
            {
                string path = string.Concat((Server.MapPath("~/temp/" + FileUpload1.FileName)));
                FileUpload1.PostedFile.SaveAs(path);
                OleDbConnection oleDbcon = new OleDbConnection("Provider=Microsoft.Ace.OLEDB.12.0;Data Source ="+path+";Extended Properties=Excel 12.0;");
                OleDbCommand cmd = new OleDbCommand("select * from [Sheet1$]", oleDbcon);
                OleDbDataAdapter objAdapter1 = new OleDbDataAdapter(cmd);
                oleDbcon.Open();
                DbDataReader dr = cmd.ExecuteReader();
                string con_str =@"Data Source =.\SQLEXPRESS; Initial Catalog = CR_SYS; Integrated Security = True";
                SqlBulkCopy bulkInsert = new SqlBulkCopy(con_str);

//this code insert data in database directly but i want sql query fro this to add data in StudentBulk table
                bulkInsert.DestinationTableName = "StudentBulk";


                bulkInsert.WriteToServer(dr);
                oleDbcon.Close();
                Array.ForEach(Directory.GetFiles((Server.MapPath("~/temp/"))), File.Delete);
                label1.ForeColor = Color.Blue;
                label1.Text = "Succesful";
            }
            else
            {
                label1.ForeColor = Color.Red;
                label1.Text = "slelct the file";

            }
        }


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

Я хочу добавить sql-запрос для вставки

2 Ответов

Рейтинг:
19

The Praveen Singh

В таком случае:-
Сначала возьмите значение листа Excel в datatable, например

OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", OleDbcon);
                OleDbDataAdapter objAdapter1 = new OleDbDataAdapter(cmd);
                ds = new DataSet();
                objAdapter1.Fill(ds);
                Dt = ds.Tables[0];

После этого используя for loop вы можете достичь своей цели следующим образом

private void InsertData()
    {
        for (int i = 0; i < Dt.Rows.Count; i++)
        {
            DataRow row = Dt.Rows[i];
            int columnCount = Dt.Columns.Count;
            string[] columns = new string[columnCount];
            for (int j = 0; j < columnCount; j++)
            {
                columns[j] = row[j].ToString();
            }
            conn.Open();
            string sql = "INSERT INTO TestTable(A,B,C,D,E)";
            sql += "VALUES('" + columns[0] + "','" + columns[1] + "','" + columns[2] + "',Convert(varchar(10),'" + columns[3] + "',103),'" + columns[4] + "')";
            SqlCommand cmd = new SqlCommand(sql, conn);
 
            cmd.ExecuteNonQuery();
            conn.Close();
        }
    }


Надеюсь, это будет ваш ответ.


Рейтинг:
0

The Praveen Singh

SqlBulkCopy просто делают через метод цикла, каждый раз, когда новые данные строки вставляются в sql через SQL Insert query, больше ничего.


Member 11306487

да я понимаю ваш ответ но я не делаю этого потому что я новичок в этом деле asp.net и c#. и этот код был скопирован из какого-то видеоурока.но это не может соответствовать моим требованиям.не могли бы вы показать мне, как я делаю метод цикла для sql-запроса