SqlBulkCopy 和 SQL 服务器触发器问题
SqlBulkCopy and SQL Server trigger Issues
我的应用程序中有以下代码。我使用 SqlBulkCopy
将 Excel 数据上传到 SQL 服务器 table。现在,我在 table 上有一个触发器。我已经像这样更改了现有代码,但出现错误。
错误是
Argument 1: cannot convert from 'System.Data.SqlClient.SqlConnection' to 'string'
我将代码更改为
oSqlBulk = new SqlBulkCopy("cn", SqlBulkCopyOptions.FireTriggers);
然后我得到一个错误
Format of the initialization string does not conform to specification starting at index 0.
请检查我的代码:
public static string ExecuteBulkCopy(string connectionString, string TableName, string Paths)
{
SqlBulkCopy oSqlBulk = null;
string error = null;
OleDbConnection myExcelConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; " +
"Data Source=" + Paths +
";Extended Properties=Excel 12.0;");
try
{
myExcelConn.Open();
// GET DATA FROM EXCEL SHEET.
OleDbCommand objOleDB = new OleDbCommand("SELECT *FROM [Sheet1$]", myExcelConn);
// READ THE DATA EXTRACTED FROM THE EXCEL FILE.
OleDbDataReader objBulkReader = null;
objBulkReader = objOleDB.ExecuteReader();
using (SqlConnection cn = new SqlConnection(connectionString))
{
// cn.Open();
oSqlBulk = new SqlBulkCopy(cn,SqlBulkCopyOptions.FireTriggers);
oSqlBulk.DestinationTableName = TableName; // TABLE NAME.
oSqlBulk.WriteToServer(objBulkReader);
// return 1;
//call the overload that takes a connection in place of the connection string
// return ExecuteNonQuery(cn, commandType, commandText, commandParameters);
}
}
catch (Exception ex)
{
error = ex.Message;
}
finally
{
oSqlBulk.Close();
oSqlBulk = null;
myExcelConn.Close();
myExcelConn = null;
}
return error;
}
如果检查 SqlBulkCopy 的有效构造函数:
https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.sqlbulkcopy(v=vs.110).aspx
您会注意到使用 SqlBulkCopyOptions 的重载不直接接受 SqlConnection。
只是 ConnectionString
因为 SqlBulkCopy 实现了 IDisposable
您应该完全替换 SqlConnection:
using (var oSqlBulk = new SqlBulkCopy(connectionString,SqlBulkCopyOptions.FireTriggers))
{
oSqlBulk.DestinationTableName = TableName;
oSqlBulk.WriteToServer(objBulkReader);
}
我已经完成了以下 changes.It 作品
using (SqlConnection cn = new SqlConnection(connectionString))
{
cn.Open();
oSqlBulk = new SqlBulkCopy(connectionString,SqlBulkCopyOptions.FireTriggers);
我的应用程序中有以下代码。我使用 SqlBulkCopy
将 Excel 数据上传到 SQL 服务器 table。现在,我在 table 上有一个触发器。我已经像这样更改了现有代码,但出现错误。
错误是
Argument 1: cannot convert from 'System.Data.SqlClient.SqlConnection' to 'string'
我将代码更改为
oSqlBulk = new SqlBulkCopy("cn", SqlBulkCopyOptions.FireTriggers);
然后我得到一个错误
Format of the initialization string does not conform to specification starting at index 0.
请检查我的代码:
public static string ExecuteBulkCopy(string connectionString, string TableName, string Paths)
{
SqlBulkCopy oSqlBulk = null;
string error = null;
OleDbConnection myExcelConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; " +
"Data Source=" + Paths +
";Extended Properties=Excel 12.0;");
try
{
myExcelConn.Open();
// GET DATA FROM EXCEL SHEET.
OleDbCommand objOleDB = new OleDbCommand("SELECT *FROM [Sheet1$]", myExcelConn);
// READ THE DATA EXTRACTED FROM THE EXCEL FILE.
OleDbDataReader objBulkReader = null;
objBulkReader = objOleDB.ExecuteReader();
using (SqlConnection cn = new SqlConnection(connectionString))
{
// cn.Open();
oSqlBulk = new SqlBulkCopy(cn,SqlBulkCopyOptions.FireTriggers);
oSqlBulk.DestinationTableName = TableName; // TABLE NAME.
oSqlBulk.WriteToServer(objBulkReader);
// return 1;
//call the overload that takes a connection in place of the connection string
// return ExecuteNonQuery(cn, commandType, commandText, commandParameters);
}
}
catch (Exception ex)
{
error = ex.Message;
}
finally
{
oSqlBulk.Close();
oSqlBulk = null;
myExcelConn.Close();
myExcelConn = null;
}
return error;
}
如果检查 SqlBulkCopy 的有效构造函数: https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.sqlbulkcopy(v=vs.110).aspx
您会注意到使用 SqlBulkCopyOptions 的重载不直接接受 SqlConnection。 只是 ConnectionString
因为 SqlBulkCopy 实现了 IDisposable
您应该完全替换 SqlConnection:
using (var oSqlBulk = new SqlBulkCopy(connectionString,SqlBulkCopyOptions.FireTriggers))
{
oSqlBulk.DestinationTableName = TableName;
oSqlBulk.WriteToServer(objBulkReader);
}
我已经完成了以下 changes.It 作品
using (SqlConnection cn = new SqlConnection(connectionString))
{
cn.Open();
oSqlBulk = new SqlBulkCopy(connectionString,SqlBulkCopyOptions.FireTriggers);