【发布时间】:2014-04-01 22:11:30
【问题描述】:
我正在将 excel 文件导入 sql server 数据库。代码工作正常,但我目前正在做的方式是删除(清除表格)表格数据。
string ssqltable = "tStudent";
string myexceldataquery = "select id,student,rollno,course from [sheet1$]";
try
{
string sexcelconnectionstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source =" + excelfilepath + "; Extended Properties=\"Excel 12.0; HDR=Yes; IMEX=2\"";
string ssqlconnectionstring = "Data Source=DELL\\SQLSERVER1;Trusted_Connection=True;DATABASE=Test;CONNECTION RESET=FALSE";
SqlConnection sqlconn = new SqlConnection(ssqlconnectionstring);
SqlCommand sqlcmd = new SqlCommand(@"MERGE tStudent AS target
USING (select ID, STUDENT , ROLLNO from @source) as source
ON (source.ID = target.ID)
WHEN MATCHED THEN
UPDATE SET Student = source.Student,
ROLLNO = source.ROLLNO
WHEN NOT MATCHED THEN
INSERT (ID, STUDENT , ROLLNO)
VALUES (source.id, source.Student, source.RollNo);", sqlconn);
******************************************
SqlParameter param = new SqlParameter();
sqlcmd.Parameters.AddWithValue("@source", dr);
param.SqlDbType = SqlDbType.Structured;
param.TypeName = "dbo.tStudent";
******************************************
sqlconn.Open();
sqlcmd.ExecuteNonQuery();
sqlconn.Close();
//series of commands to bulk copy data from the excel file into our sql table
OleDbConnection oledbconn = new OleDbConnection(sexcelconnectionstring);
OleDbCommand oledbcmd = new OleDbCommand(myexceldataquery, oledbconn);
oledbconn.Open();
OleDbDataReader dr = oledbcmd.ExecuteReader();
SqlBulkCopy bulkcopy = new SqlBulkCopy(ssqlconnectionstring);
bulkcopy.DestinationTableName = ssqltable;
bulkcopy.WriteToServer(dr);
while (dr.Read())
{
//bulkcopy.WriteToServer(dr);
}
oledbconn.Close();
Console.WriteLine(".xlsx file imported succssessfully into database.", bulkcopy.NotifyAfter);
}
参见 * 部分。我已经在 Sqlparameters 中分配了我的 OleDb DataRreader dr,但我稍后会在代码中声明它。请指导我如何构建我的代码。
示例将不胜感激。
【问题讨论】:
-
你想要INSERT 而不是更新。在 SQL 中,UPDATE 更改现有值。
-
@RadioSpace 我想在 Sql 中更新。有一段时间我正在删除数据并插入它。但现在我想更新这些数据。我觉得我传入的更新查询和参数不是正确的做法。谢谢。
-
@ConradFrix 我可以使用任何东西,只是我是初学者,我想要一些更简单的代码。我不熟悉合并和表值参数。谢谢。
-
@user2525244 - 所以你有固定的数据,好吧。您是否遇到错误或某些内容无法正常工作?
-
如果我从 sql 表中删除所有数据然后执行导入,@RadioSpace Import 工作正常。但是如果我想更新表而不是删除,我就无法做到这一点。所以我想我不知道如何为更新编写更新参数化查询。所以请帮助更新参数化查询。谢谢。
标签: c# sql sql-server parameterized-query dynamicquery