【发布时间】:2015-08-04 00:35:48
【问题描述】:
这必须是一个简单的普通 SQL insert 方法,但是当我运行它并单击“button1”时出现错误
system.data.dll 中发生了“system.data.sqlclient.sqlexception”类型的未处理异常
有谁知道问题出在哪里?
namespace InsertDeleteUpdate_Login
{
public partial class Form1 : Form
{
SqlConnection cn = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=E:\C #\InsertDeleteUpdate-Login\InsertDeleteUpdate-Login\Database1.mdf;Integrated Security=True");
SqlCommand cmd = new SqlCommand();
SqlDataReader dr;
public Form1()
{
InitializeComponent();
cmd.Connection = cn;
}
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text != "" && textBox2.Text != "")
{
cn.Open();
cmd.CommandText = "INSERT INTO info (ID,Name,Password)" + " VALUES ('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "')'";
cmd.ExecuteNonQuery();
cmd.Clone();
MessageBox.Show("Inserare reusita");
cn.Close();
}
}
}
}
【问题讨论】:
-
捕获异常以查看错误消息是什么。系统试图告诉你哪里出了问题,不要忽略异常。此外,必须...您的代码极易受到SQL 注入攻击 的攻击。使用参数化查询而不是将用户输入作为代码执行。您正在以纯文本形式存储用户密码。这对您的用户非常不负责任。用户密码应该使用散列算法进行单向隐藏,并且应该永远可检索。
-
您有一个 SQL 注入漏洞,文本框值中的
'会导致错误或更严重的损坏。 Use a parametrized insert instead -
使用参数化查询!!!而不是那些讨厌的字符串。
-
@CraigW。记住你曾经是初学者。我个人从未在学校学习过调试,当然那是 30 年前的事了。我希望现在它会变得更好,并且学校会关注它,因为它与编程本身一样重要。
-
@user2366842 ,是的,它是一个原型,我是 C# 的初学者,我在学校只有一门关于数据库的课程,这更像是 sql 数据库的演示,而不是学习实用知识的课程.此外,在我就读的高中,计算机科学课程完全专注于算法(没有什么关于OOP的)。幸运的是,高中的计算机科学老师提供了一个课程(大约8节课),面向所有学生高中毕业,目的是向我们介绍 oop(c#)。在此之前,我什至不知道 oop。
标签: c# sql sql-server