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();
}
}
}
下面的代码应该可以做到这一点。还有一些改进的空间,但我至少希望它能解决你的问题。
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();