c#登录应用程序与SQL

本文关键字:SQL 应用程序 登录 | 更新日期: 2023-09-27 18:10:11

嗨,我试图从本地sql服务数据库获取数据,从用户注册表单获取输入。但是当我按下按钮时,它没有被记录到可用的数据库中。

我需要使用execute non query吗?我该如何修改这段代码?由于

using System.Data.Sql;
using System.Data.SqlClient;
namespace Paddle_Power
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2();
            form2.Show();
            string connection = @"Data Source=.'SQLEXPRESS;AttachDbFilename=|DataDirectory|'PaddlePower.mdf;Integrated Security=True;User Instance=True";
            SqlConnection cn = new SqlConnection(connection);
            try
            {
                cn.Open();
                MessageBox.Show("open");
            }
            catch (Exception)
            {
                MessageBox.Show("Did not connect");
            }
            string username = textBox1.Text;
            string password = textBox2.Text;
            string sqlquery = ("SELECT * FROM User WHERE Username = '" + textBox1.Text + "'");
            sqlquery = "INSERT INTO [User] (Username, Password) VALUES ('" + textBox1.Text + "','" + textBox2.Text + "')";
            SqlCommand command = new SqlCommand(sqlquery, cn);
            command.Parameters.AddWithValue("Username", username);
            command.Parameters.AddWithValue("Password", password);
            command.Parameters.Clear();

        }
    }
}

c#登录应用程序与SQL

下面的代码应该可以做到这一点。还有一些改进的空间,但我至少希望它能解决你的问题。

string connection = @"Data Source=.'SQLEXPRESS;AttachDbFilename=|DataDirectory|'PaddlePower.mdf;Integrated Security=True;User Instance=True";
object queryResult = null;
using (SqlConnection cn = new SqlConnection(connection))
{
    cn.Open(); // Open connection
    // SELECT
    using (SqlCommand cmd = new SqlCommand("SELECT * FROM User WHERE Username = @Username AND Password = @Password", cn))
    {
        cmd.Parameters.AddWithValue("@Username", textBox1.Text);
        cmd.Parameters.AddWithValue("@Password", textBox2.Text);
        queryResult = cmd.ExecuteScalar();
    }
    // INSERT
    using (SqlCommand cmd = new SqlCommand("INSERT INTO [User] (Username, Password) VALUES (@Username, @Password)", cn))
    {
        cmd.Parameters.AddWithValue("@Username", textBox1.Text);
        cmd.Parameters.AddWithValue("@Password", textBox2.Text);
        cmd.ExecuteNonQuery(); // or int affected = cmd.ExecuteNonQuery()
    }
}

您可以请求第一个SqlCommand对象或创建一个新对象。你选择哪一种方法都没有什么区别。

queryResult只是用于存储cmd.ExecuteScalar()的结果。如果需要,可以将其映射到对象(当选择多个列时),或者将其强制转换为新类型(如果选择单个列)。

直接的答案是肯定的,您需要执行非查询。你看,你已经准备好了命令,但你还没有发出命令。Jstnasn的例子应该很有帮助。注意using语句——当您退出using语句时,这些语句将隐式地关闭命令,从而确保命令在完成时始终关闭。

对于SqlConnection也是如此——使用有助于确保正确地处理连接。但是,如果您的数据库连接字符串允许连接池,那么我相信using语句只会终止您的对象,而不会实际终止与数据库的连接。这是很有利的,因为下次需要打开数据库连接时,I/O开销会更低——您只需连接到现有的TCP/IP套接字,而不是打开一个新的。

您没有参数,也没有实际将查询发送到数据库

        // parameter placeholders defined with @parameter_name
        sqlquery = "INSERT INTO [User] (Username, Password) VALUES (@username, @Password);
        SqlCommand command = new SqlCommand(sqlquery, cn);
        command.Parameters.AddWithValue("@Username", username);
        command.Parameters.AddWithValue("@Password", password);
        // This will make the query happen on the database.
        // It will handle sending the parameters and all that good stuff
        // http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx
        command.ExecuteNonQuery();
相关文章: