我正在使用C#读取SQL存储过程,将存储过程的结果放入C#数据表中,然后逐行读取数据表以构建我的“插入....值”等。这将使用正确的数据创建我的Excel电子表格。但是,有没有一种方法可以进行批量插入,而不是逐行插入?
如果我没有想到让存储过程将结果写入永久表,那么就有办法进行“插入....选择”。当我在C#中尝试过这个时,代码无法找到指定的SQL表名“Microsoft数据库访问引擎找不到对象”,正确的语法是什么,在哪里指定访问SQL表的位置/方式?
谢谢
嗨,该链接看起来像是在使用Microsoft.Office.Interop.Excel; 我正在使用OLEDB(我现在开始后悔!)。所以基本上我有一个从另一个组件调用的C#类。此C#类读取sql存储过程,将结果放入数据表中。然后我使用OLEDBcommand“Insert into([])values(”?“)设置表定义。然后我定义参数,例如cmd.Parameters.Add(columnHeading,OleDbType.VarChar,size)等。然后为每一行我在数据表中找到了我设置的cmd.Parameters [i] .value = row [i],其中参数[i]为该行中的每一列递增。然后我循环查找每个数据行并设置cmd.Parameters [i]。值得适当。因为我必须为我在数据集中找到的每一行设置cmd.Parameters [i] .Value,然后cmd.ExecuteNonQuery(); ,这是非常耗时的。那么有没有办法将数据从数据表批量插入到OLEDB命令中,如果没有,我可以通过直接引用SQL表并执行“insert into..select from”来插入数据吗?
答案 0 :(得分:0)
我的问题是:它真的需要吗? Excel本身为您提供了一种以非常简单的方式访问外部数据(SQL Server)的工具。如果你不修改拉取的数据 - 为什么你需要一个中间人?
答案 1 :(得分:0)
您可以使用分号分隔insert语句,只运行1个命令。例如......
string sql = "insert into table (col1,col2) values ('row1','row1');"
sql += "insert into table (col1,col2) values ('row2','row2');"
sql += "insert into table (col1,col2) values ('row3','row3');"
SqlConnection conn = new SqlConnection("some connection string");
SqlCommand cmd = new SqlCommand(sql, conn);
conn.Open();
conn.ExecuteNonQuery();
conn.Dispose();
cmd.Dispose();
或类似的东西。您正在使用1个命令执行所有3个查询。这可能不适用于SQL Server以外的数据库,但肯定适用于SQL Server。