C# 在C中将Excel上载到SQL Server时自动添加上载者(用户名或名称)#
我想将Excel数据上载到SQL Server中,上载人(即从会话方法中选择哪一个) 我已经创建了表名、国家、地址、上传人 正常情况下,上传工作正常,但我想在上传excel批量上传时添加上传值 我不知道如何插入批量上传的上传值有人帮我吗 这是我的代码:C# 在C中将Excel上载到SQL Server时自动添加上载者(用户名或名称)#,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我想将Excel数据上载到SQL Server中,上载人(即从会话方法中选择哪一个) 我已经创建了表名、国家、地址、上传人 正常情况下,上传工作正常,但我想在上传excel批量上传时添加上传值 我不知道如何插入批量上传的上传值有人帮我吗 这是我的代码: try { myExcelConn.Open(); // GET DATA FROM EXCEL SHEET. OleDbCommand objOleDB = new OleDbCommand("SELECT * FRO
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();
// SET THE CONNECTION STRING.
string sCon = sqlconn;
using (SqlConnection con = new SqlConnection(sCon))
{
con.Open();
//SqlConnection p = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\jetback\source\repos\Projectstudent\webdown_up_load\App_Data\upload.mdf;Integrated Security=True");
// FINALLY, LOAD DATA INTO THE DATABASE TABLE.
oSqlBulk = new SqlBulkCopy(con);
oSqlBulk.DestinationTableName = "Table3"; // TABLE NAME.
oSqlBulk.ColumnMappings.Add("name", "name");
oSqlBulk.ColumnMappings.Add("address", "address");
oSqlBulk.ColumnMappings.Add("country", "country");
oSqlBulk.WriteToServer(objBulkReader);
}
lblConfirm.Text = "DATA IMPORTED SUCCESSFULLY.";
lblConfirm.Attributes.Add("style", "color:green");
}
catch (Exception ex)
{
lblConfirm.Text = ex.Message;
lblConfirm.Attributes.Add("style", "color:red");
}
finally
{
// CLEAR.
oSqlBulk.Close();
oSqlBulk = null;
myExcelConn.Close();
myExcelConn = null;
}
您必须从Excel获取,然后插入SQL
//After objBulkReader = objOleDB.ExecuteReader();
if (objBulkReader.HasRows)
{
while (objBulkReader.Read())
{ string newname = objBulkReader[0].ToString();
string address= objBulkReader[1].ToString();
string country= objBulkReader[2].ToString();
string uploadedby=Session["uploader"].ToString();
//insert these into SQL db by SQL connection
}
}
objBulkReader中的0、1和2是Excel中的列位置。如果要在数据集中已有数据时添加更多列,最好使用DataTable:
var results = new DataTable();
using(var myExcelConn = new OleDbConnection(excCnnStr))
{
using (var cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", myExcelConn))
{
myExcelConn.Open();
var adapter = new OleDbDataAdapter(cmd);
adapter.Fill(results);
}
}
//add new col
results.Columns.Add("uploadedBy", typeof(System.Int32));
foreach (DataRow row in results.Rows)
{
row["uploadedBy"] = loggedInUserId; // set uploader
}
using (var con = new SqlConnection(sCon))
{
con.Open();
using (var oSqlBulk = new SqlBulkCopy(con))
{
oSqlBulk.DestinationTableName = "Table3";
oSqlBulk.ColumnMappings.Add("name", "name");
oSqlBulk.ColumnMappings.Add("address", "address");
oSqlBulk.ColumnMappings.Add("country", "country");
oSqlBulk.ColumnMappings.Add("uploadedBy", "uploadedBy");
oSqlBulk.WriteToServer(results);
}
}
有什么问题吗?你能详细说明一下吗?这是对你最好的帮助:是的。此查询用于在sql server中上载excel数据。我已经创建了表名、地址、县,并添加了。在excel中,我有一个列名、地址、国家。在这个added by value中,我想在批量上传时添加这个额外的值。例如,在excel值中(约翰,德里吉隆街121号)。但在上载时,它应添加uploadby(约翰,德里吉隆街121号,阿拉文丹)的值@DanielB Bro我知道要上传数据,但我想添加添加者,即登录用户名oSqlBulk.DestinationTableName=“Table3”;//表名**在这里,我想添加由添加的列。上传时应在**oSqlBulk.ColumnMappings.Add(“名称”、“名称”)列中自动添加“按用户名添加”;添加(“地址”,“地址”);添加(“国家”、“国家”);WriteToServer(objBulkReader);foreach(results.Rows中的var row){row[“uploadedBy”]=loggedInUserId;//set uploader}在这里,它抛出了一个错误,例如无法将索引应用于'object'类型的表达式dynamicchange foreach(results.Rows中的var row)到foreach(results.Rows中的DataRow):)工作正常兄弟和我还有一个疑问,上传excel文件时如何删除副本。我是否可以使用“删除注释”进行逐行比较uploading@AravindhanR您可以通过results.DefaultView.ToTable(true);//不同的rowsu也可以是更具体的结果。DefaultView.ToTable(true,“name”,“country”);