C# 插入数据库

C# 插入数据库,c#,sql,C#,Sql,我已经确保所有内容都与数据库中的列类型相关,但我一直得到一个SQLCeException。谁能告诉我这个代码有什么问题吗 private void ANDPaddDriverButton_Click(object sender, EventArgs e) { string first = ANDPfirstNametextBox.Text; string last = ANDPlastNametextBox.Text; string mid = textBox5.T

我已经确保所有内容都与数据库中的列类型相关,但我一直得到一个SQLCeException。谁能告诉我这个代码有什么问题吗

private void ANDPaddDriverButton_Click(object sender, EventArgs e)
{
     string first = ANDPfirstNametextBox.Text;
     string last = ANDPlastNametextBox.Text;
     string mid = textBox5.Text;
     string phone = ANDPphonetextBox.Text;
     string social = ANDPsSNtextBox.Text;
        // EmployeeType="Employee"
     string city = ANDPCityTextbox.Text;
     string state = ANDPStatetextBox.Text;
     string zip = ANDPzipCodetextbox.Text;
     string email = ANDPemailtextBox.Text;
     string address = ANDPaddressTextBox.Text;
     string user = userName.Text;

     DBConn.Open();
     SqlCeCommand cmd = new SqlCeCommand("INSERT INTO [Employee Table] VALUES (" +
            first + "," + last + "," + mid + "," + address + "," + phone + "," + social + ","
                + "Employee" + "," + city + "," + state + "," + zip + "," + email + "," + userName + ")", DBConn);
     cmd.ExecuteNonQuery();
     DBConn.Close();
}

字符串/varchar类型的字段应包含在单引号中

SqlCeCommand cmd = new SqlCeCommand("INSERT INTO [Employee Table] VALUES (" +
    "'" + first + "'," 
等等


另外,正如其他人已经评论过的那样,您的代码将受到SQL注入攻击

字符串/varchar类型的字段将用单引号括起来

SqlCeCommand cmd = new SqlCeCommand("INSERT INTO [Employee Table] VALUES (" +
    "'" + first + "'," 
等等


另外,正如其他人所评论的,您将使您的代码遭受SQL注入攻击。

正如Lorenzo所说,字符串值必须用单引号括起来,但请阅读这篇文章,它解释了为什么不应该以这种方式构建查询,并向您展示了如何使用参数。

正如Lorenzo所说,字符串值必须用单引号括起来,但请阅读这篇文章,它解释了为什么不应该以这种方式构建查询,并向您展示了如何使用参数进行查询。

使用参数来防止SQL注入,以及列名,因为您依赖于数量,表列的顺序,将来可能会更改(我猜是列名):


顺便说一下,不要在表名和列名中使用空格;-)

使用参数来防止SQL注入和列名,因为您依赖于表的列的数量和顺序,并且将来可能会更改(我猜是列名):


顺便说一下,不要在表名和列名中使用空格;-)

它有一个SQL注入漏洞和一个糟糕的表名。它有一个SQL注入漏洞和一个糟糕的表名。不。他应该使用参数。是的。他应该这样做。但这不是问题所在。他只是想知道错误在哪里我认为总是按现状回答问题不一定是最好的策略。如果他有一个明显的安全漏洞,而问题的答案没有解决这个漏洞,那么这个安全漏洞就会永久存在,并使每个人都处于危险之中。如果OP得到答案,然后将其应用于处理信用卡数据的代码,该怎么办。有一个很好的攻击向量就在那里!我完全同意你们两个。所有评论/回答这个问题的人都发出了SQL注入的警告。但是我们不知道他是在做第一次插入,还是一个简单的学习练习,或者他是否打算在一个在线应用程序上编写代码…@todd:不客气。很高兴这有帮助。请认真考虑SQL注入的问题,即使这是一个基本的介绍。不,他应该使用参数。是的。他应该这样做。但这不是问题所在。他只是想知道错误在哪里我认为总是按现状回答问题不一定是最好的策略。如果他有一个明显的安全漏洞,而问题的答案没有解决这个漏洞,那么这个安全漏洞就会永久存在,并使每个人都处于危险之中。如果OP得到答案,然后将其应用于处理信用卡数据的代码,该怎么办。有一个很好的攻击向量就在那里!我完全同意你们两个。所有评论/回答这个问题的人都发出了SQL注入的警告。但是我们不知道他是在做第一次插入,还是一个简单的学习练习,或者他是否打算在一个在线应用程序上编写代码…@todd:不客气。很高兴这有帮助。请认真考虑SQL注入的问题,即使这是一个基本的介绍。