Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中将Excel上载到SQL Server时自动添加上载者(用户名或名称)#_C#_Asp.net_Sql Server - Fatal编程技术网

C# 在C中将Excel上载到SQL Server时自动添加上载者(用户名或名称)#

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

我想将Excel数据上载到SQL Server中,上载人(即从会话方法中选择哪一个)

我已经创建了表名、国家、地址、上传人

正常情况下,上传工作正常,但我想在上传excel批量上传时添加上传值

我不知道如何插入批量上传的上传值有人帮我吗

这是我的代码:

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”);