繁体   English   中英

Visual Studio C#将文本框连接到数据库

[英]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 = namepassword = login的db值,然后ALSO传入了两个参数@user@password ,而没有告诉SQL哪个设置正确。

您肯定要使用SqlCommand选项,并将SqlCommand.CommandType设置为正确的值。 这样分配参数是安全的。 直接将变量放到VALUES()子句中(就像您在原始帖子中一样)可以使您容易受到SQL Injection攻击。

我在这里编辑了使用存储过程的建议。 根据评论中的少量讨论,这更多是我个人的偏爱。 我喜欢分离我的数据库层。 同样,这意味着如果有任何更改,您只需要更新一次存储过程,而不是在应用程序中可能存在的任何地方查找查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM