【问题标题】:Grid View Insert to Database网格视图插入数据库
【发布时间】:2020-04-12 09:45:12
【问题描述】:

第一次尝试 C#。我正在创建一个将 Excel 工作表上传到 SQL Server 数据库表中的 Web 表单。它首先上传一个选定的文件,然后按下“预览”按钮在网格视图上显示数据。从那里,然后按下“上传”按钮,将其插入到我本地 SQL 服务器上的数据库表中。

到目前为止,我无法将网格视图中的数据与表格匹配。数据将始终更改,并且永远不会是相同的行数。有什么建议?我的代码如下:

for (int i = 0; i < GridView2.Rows.Count - 1; i++)
            {
                SqlCommand cmd = new SqlCommand(@"USE [PD_Overview] INSERT INTO [dbo].['LABTEST$']
                    ([EmployeeID]
                    ,[Company]
                    ,[Employee Name]
                    ,[Start Time]
                    ,[Signature In]
                    ,[Lunch IN]
                    ,[Lunch OUT]
                    ,[End Time]
                    ,[Hours]
                    ,[Job]
                    ,[Period]
                    ,[Date]
                    ,[PayID]
                    ,[Equipment Used]
                    ,[Injured ?]
                    ,[Signature OUT]
                    ,[Superintendent]
                    ,[Processed By]
                    ,[Date Processed]
                    ,[On Time or Late - Proc]
                    ,[Reported By]
                    ,[Date Reported]
                    ,[Hours Late-Rpt]
                    ,[Job % Complete]
                    ,[Variances]
                    ,[Unique ID]
                    ,[RT Hours WTD]
                    ,[RT Hours Daily]
                    ,[OT Hours Daily]
                    ,[RT $ Daily]
                    ,[OT $ Daily]
                    ,[Total $ Daily]
                    ,[PERDIEM $ Daily ]
                    ,[HOURS(No PerDiem)]
                    ,[ID]
                    ,[SORT]) VALUES('" + GridView2.Rows[i].Cells[0] + "','" + GridView2.Rows[i].Cells[1] + "')"

【问题讨论】:

  • 您尝试使用原始 SQL 执行此操作的方式——您只为其中两个列(EmployeeID、Company)提供数据。尝试为 VALUES() 参数中剩余的每一列提供数据
  • 关于 SQL 注入攻击和字符串连接的强制性警告。改用参数!看起来您的列名无效,您从哪里获得这些列名?带有符号和空格的必须用反引号括起来,但我不确定你甚至可以使用 % 和 $,或者 -...
  • 谢谢@Fraze 我添加了额外的,它似乎工作。现在只是日期的转换错误。
  • @RonBeyer 参数怎么样?推荐任何材料来阅读这个?我是编码新手。名称是正在上传的 Excel 工作表的列标题。

标签: c# asp.net sql-server gridview insert


【解决方案1】:

在这种情况下,您可以使用类似这样的相同代码

public void Test()
    {
        //you can see all type of connection string for sql server in https://www.connectionstrings.com/sql-server/
        //example of connection string for sql server
        //Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;
        SqlConnection con=new SqlConnection("your connection string");
        SqlCommand cmd;
        string commandText = "INSERT INTO [dbo].['LABTEST$']([EmployeeID],[Company],[Employee Name],[Start Time]"+
            ",[Signature In],[Lunch IN],[Lunch OUT],[End Time],[Hours],[Job],[Period],[Date],[PayID],[Equipment Used],[Injured ?]"+
            ",[Signature OUT],[Superintendent],[Processed By],[Date Processed],[On Time or Late - Proc],[Reported By],[Date Reported]"+
            ",[Hours Late-Rpt],[Job % Complete],[Variances],[Unique ID],[RT Hours WTD],[RT Hours Daily],[OT Hours Daily],[RT $ Daily]"+
            ",[OT $ Daily],[Total $ Daily],[PERDIEM $ Daily ],[HOURS(No PerDiem)],[ID],[SORT]) VALUES(@EmployeeID,@Company)";
        cmd.CommandType = CommandType.Text;
        for (int i = 0; i < GridView2.Rows.Count - 1; i++)
        {
            cmd=new SqlCommand();
            cmd.Connection = con;
            cmd.CommandText = commandText;
            cmd.Parameters.AddWithValue("@EmployeeID", GridView2.Rows[i].Cells[0].Value);
            cmd.Parameters.AddWithValue("@Company", GridView2.Rows[i].Cells[1].Value);
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
            cmd = null;
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    相关资源
    最近更新 更多