[英]visual studio C# connect textbox to database
我已经在c#VS 2010中编写了此简单代码,用于存储名称并登录到本地表。 当我跑步时,向我显示此按摩:
“ nvarchar附近的语法不正确”
using System;
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
string name =textBox1.Text;
string login =textBox2 .Text;
string sqlquery;
SqlConnection cn = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename= C:\\Users\\Safeen\\Documents\\Visual Studio 2010\\Projects\\WindowsFormsApplication12\\WindowsFormsApplication12\\Database1.mdf;Integrated Security=True;User Instance=True");
cn.Open();
sqlquery = "INSERT INTO Table1 (user, password) VALUES ('" + name + "','" + login + "')";
try
{
SqlCommand command = new SqlCommand(sqlquery, cn);
command.Parameters.AddWithValue("@user ", textBox1.Text);
command.Parameters.AddWithValue("@password ", textBox2.Text);
command.ExecuteNonQuery();
MessageBox.Show("Table1 Added");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
textBox1.Clear();
textBox2.Clear();
cn.Close();
}
}
您正在为参数提供多个值。
您说的是user = name
和password = login
的db值,然后ALSO传入了两个参数@user
和@password
,而没有告诉SQL哪个设置正确。
您肯定要使用SqlCommand
选项,并将SqlCommand.CommandType
设置为正确的值。 这样分配参数是安全的。 直接将变量放到VALUES()
子句中(就像您在原始帖子中一样)可以使您容易受到SQL Injection攻击。
我在这里编辑了使用存储过程的建议。 根据评论中的少量讨论,这更多是我个人的偏爱。 我喜欢分离我的数据库层。 同样,这意味着如果有任何更改,您只需要更新一次存储过程,而不是在应用程序中可能存在的任何地方查找查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.