【问题标题】:CSV File import to SQL Server errorCSV 文件导入到 SQL Server 错误
【发布时间】:2013-05-27 15:25:53
【问题描述】:

我正在将 CSV 文件导入 SQL Server

我从 Internet 获得代码 .. 工作正常但是当我将该 CSV 文件添加一个额外字段 (User_Id) 到 SQL 时,这会给出错误 ....我无法理解哪里出错了.. ..代码... 数据表 tblReadCSV = new DataTable();

            tblReadCSV.Columns.Add("Name");
            tblReadCSV.Columns.Add("Email");
            tblReadCSV.Columns.Add("Mobile");

            tblReadCSV.Columns.Add("User_id");
            string path = System.IO.Path.GetFileName(FileUpload1.PostedFile.FileName);

            FileUpload1.PostedFile.SaveAs(Server.MapPath("~/Email/UploadFile/" + path));
            path = Server.MapPath("~/Email/UploadFile/" + path);
            TextFieldParser csvParser = new TextFieldParser(path);
             csvParser.Delimiters = new string[] { "," };
            csvParser.TrimWhiteSpace = true;
            csvParser.ReadLine();

            while (!(csvParser.EndOfData == true))
            {
                tblReadCSV.Rows.Add(csvParser.ReadFields());
            }
            string strCon = ConfigurationManager.ConnectionStrings["con"].ConnectionString;
            string strSql = "Insert into Contacts(Name,Email,Mobile,User_id ) values(@Name,@Email,@Mobile," + UserId +")";
            SqlConnection con = new SqlConnection(strCon);
            SqlCommand cmd = new SqlCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = strSql;
            cmd.Connection = con;               
            cmd.Parameters.Add("@Name", SqlDbType.VarChar, 50, "Name");
            cmd.Parameters.Add("@Email", SqlDbType.VarChar, 50, "Email");
            cmd.Parameters.Add("@Mobile", SqlDbType.VarChar, 50, "Mobile");

            cmd.Parameters.Add("@User_id", SqlDbType.Int , UserId);

            SqlDataAdapter dAdapter = new SqlDataAdapter();
            dAdapter.InsertCommand = cmd;
            int result = dAdapter.Update(tblReadCSV);
            Label1.Text = "File successfully uploaded";

【问题讨论】:

    标签: c# asp.net .net visual-studio-2010 csv


    【解决方案1】:

    你没有说错误信息是什么,也没有说它发生在哪里,但在我看来,这一行

    string strSql = "Insert into Contacts(Name,Email,Mobile,User_id ) values(@Name,@Email,@Mobile," + UserId +")";
    

    应该是这样的

    string strSql = "Insert into Contacts(Name,Email,Mobile,User_id ) values(@Name,@Email,@Mobile,@User_id)";
    

    【讨论】:

    • 但 User_Id 是当前用户登录的本地 var ....我知道问题出在这个字段中 ....但是如果我写 @UserId 那么如何设置当前用户价值?
    • @KrantiSingh - 好的,但您将其作为参数添加到查询中。所以要么改变我说的话,要么删除cmd.Parameters.Add("@User_id", SqlDbType.Int , UserId)这一行——否则我看不出它有什么意义。
    • 如果它是一个局部变量,然后分配变量和/或捕获它,就像你将任何其他变量/值一样......本地与否......你如何捕获当前的 userId......?不要把简单的事情搞得这么复杂..
    • 我不擅长 SQL .. 感谢朋友的帮助 ...我删除了 cmd.Parameters.Add("@User_id", SqlDbType.Int , UserId) 并且工作正常..再次感谢
    【解决方案2】:

    替换

    string strSql = "Insert into Contacts(Name,Email,Mobile,User_id)
    values(@Name,@Email,@Mobile," + UserId +")";
    

    string strSql = "Insert into Contacts(Name,Email,Mobile,User_id )
    values(@Name,@Email,@Mobile,@UserId)";
    

    在上面一行中,你只是声明了参数。

    这就是您实际传递当前用户 ID 的方式:

    cmd.Parameters.Add("@User_id", SqlDbType.Int , UserId);
    

    试试这个;希望它会起作用。

    【讨论】:

      【解决方案3】:

      values(@Name,@Email,@Mobile," + UserId +")"// 来源来自你的 c

      avoid ''+ UserId +'' in your string strSql..
      

      【讨论】:

        猜你喜欢
        • 2013-06-04
        • 1970-01-01
        • 1970-01-01
        • 2013-02-20
        • 1970-01-01
        • 1970-01-01
        • 2015-03-22
        • 1970-01-01
        相关资源
        最近更新 更多