-2

在窗口应用程序中,我正在尝试使用数据库,如何在 app.config 中编写连接字符串。以下是 app.config 中的连接字符串

<configuration>
 <appSettings >
  <add key ="mycon" 
      value ="server=192*****;database=*****;
      uid=**;pwd=*****;"/>
</appSettings>
</configuration>

连接数据库的代码:

  SqlConnection con = new SqlConnection(
   ConfigurationSettings.AppSettings["mycon"].ToString()); con.Open(); 
  SqlCommand cmd = new SqlCommand("Usp_chat_login", con);
  cmd.CommandType = CommandType.StoredProcedure ;
  cmd.Parameters.Add("@userid", SqlDbType.VarChar, 20);
   cmd.Parameters["@userid"].Value = textBox1.Text;
  cmd.Parameters.Add("@password", SqlDbType.VarChar, 20);
  cmd.Parameters["@password"].Value = textBox2.Text;
  int reslt =  cmd.ExecuteNonQuery();  con.Close();
  if (reslt > 0)
    {
       MessageBox.Show("Yes");
    } 
  else
     {
          MessageBox.Show("No");

     }

每次我得到reslt=-1,即使我通过了正确的凭据

4

2 回答 2

3

每次我得到 reslt=-1,即使我通过了正确的凭据

这与凭据无关,也与配置文件无关。如果对数据库的身份验证/授权失败,则会引发异常。

问题可能出在您的Usp_chat_login程序中。

请参阅文档ExecuteNonQuery()

对于 UPDATE、INSERT 和 DELETE 语句,返回值是受命令影响的行数。当正在插入或更新的表上存在触发器时,返回值包括受插入或更新操作影响的行数以及受一个或多个触发器影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,则返回值也是 -1。

其他注意事项:

  • IDisposable应该处理实现的类型,尤其是与非托管资源交互的类型(例如数据库连接)。一个简单的方法是将这些类型的实例包装在一个using语句中

  • 在任何应用程序中,纯文本密码都被认为是不安全/不负责任的。

于 2013-09-23T05:17:47.837 回答
0

将其写入 App.XAML

 public partial class App : Application
{
    public App()
    {
        string connectionStr = "Data Source=system\\SQLExpress;Initial Catalog=DBName; user id=sa; password=test123;";
        Application.Current.Properties["conStr"] = connectionStr;
    }
}

并以主要形式访问它

static string strCon = Application.Current.Properties["conStr"].ToString();
于 2013-09-23T05:17:39.627 回答