我正在WPF中创建一个应用程序。该应用程序名为圣约翰,基本上是一堆文本框,用于保存患者的详细信息。到目前为止,我已经建立了一个数据库,文本框和一些背景代码。我目前遇到一个错误,我认为这与连接字符串有关。目前,我还是C#和SQL Server的新手。
错误状态:
无法打开登录请求的StJohnsDatabase。登录失败。。。
这是我的源代码。我有5个文本框和一个按钮(save_btn
):
private void save_btn_Click(object sender, RoutedEventArgs e)
{
SqlConnection con = new SqlConnection("Integrated Security=True");
con.ConnectionString = @"Data Source=(LocalDB)v11.0;Initial Catalog=StJohnsDatabase;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False";
try
{
string sql = "INSERT INTO [patient] (PatientId , Firstname, Surname, Phonenumber, time) values(" + patient_id_tb.Text + " , ' " + firstname_tb.Text + " ' , ' " + surname_tb.Text + " ' , " + phone_number_tb.Text + " , ' " + time_tb.Text + " ' )";
SqlCommand exeSql = new SqlCommand(sql, con);
con.Open();
exeSql.ExecuteNonQuery();
MessageBox.Show("Saved!");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error!");
}
finally
{
con.Close();
}
}
(顺便说一句,我在互联网上搜索了很长时间,找不到/不明白什么是不正确的/如何解决这个问题。)
仔细检查连接字符串。。
始终建议使用参数化查询以避免sql注入
string sql = "INSERT INTO [patient] (PatientId , Firstname, Surname, Phonenumber, time) values (@PatientId,@Firstname,@Surname,@Phonenumber,@time)";
SqlCommand exeSql = new SqlCommand(sql, con);
exeSql.Parameters.AddWithValue("@PatientId",patient_id_tb.Text);
exeSql.Parameters.AddWithValue("@Firstname",firstname_tb.Text);
exeSql.Parameters.AddWithValue("@Surname",surname_tb.Text );
exeSql.Parameters.AddWithValue("@Phonenumber",phone_number_tb.Text);
exeSql.Parameters.AddWithValue("@time",time_tb.Text);
集成安全意味着您的应用程序将作为当前登录的windows用户连接到数据库。您当前的windows用户帐户是否有有效的数据库登录,或者是否使用特定的用户名/密码登录。
如果你有一个特定的用户名/密码,你必须在你的连接字符串中指定它们:
con.ConnectionString = @"Data Source=(LocalDB)v11.0;Initial Catalog=StJohnsDatabase;User Id={username}; Password={password};Connect Timeout=15;Encrypt=False;TrustServerCertificate=False";
我发现了问题。这100%与连接字符串不正确有关。