通过网络将C#app与SQL Server 2008连接

时间:2012-10-10 11:45:09

标签: c# sql-server-2008 networking connection

尝试连接时出错

  

对象引用未设置为对象的实例。

该应用程序正在我的笔记本电脑上运行SQL Server数据库,但我需要在笔记本电脑上连接应用程序并通过网络连接我的PC上的SQL Server(Sharkawy-PC)我需要{{1}的帮助代码&每个表单的代码都可以使用app.config中的连接。

app.config

这是我在app.config中的连接

    private void btnlogin_Click(object sender, EventArgs e)
    {
        SqlCommand cmd;
       string UserName = txtusername.Text;
      var Connectionstring = ConfigurationManager.ConnectionStrings["BookingConnectionString"].ConnectionString;
      SqlConnection conn = new SqlConnection(Connectionstring);

       //////SqlConnection conn = new SqlConnection();
       //////conn.ConnectionString = System.Configuration.ConfigurationSettings.AppSettings["BookingConnectionString"];

        string strsql = "select * from UserInfo,UsersGroup  where UserInfo.GroupID=UsersGroup.GroupID and UserName = '" + UserName + "' and UserPassword='" + txtusername.Text + "'";
        cmd = new SqlCommand(strsql, conn);
        conn.Open();

        dr = cmd.ExecuteReader();
        if (dr.HasRows)
        {
            dr.Read();
            string d = dr.GetString(9).ToString();

            if (d == "Admin")
            {
                AdminMainfrm adminmainfrm = new AdminMainfrm(txtusername.Text);
                this.Hide();
                adminmainfrm.ShowDialog();
            }
            else
            {
                UserMainfrm UserMainfrm = new UserMainfrm();
                this.Hide();
                UserMainfrm.ShowDialog();
            }
        }
        else
        {
            label5.Text = "Invalid Username or password, please try again";

        }
        conn.Close();
    }

2 个答案:

答案 0 :(得分:1)

您需要做的一件事就是改变这一行:

var Connectionstring = ConfigurationManager.ConnectionStrings["BookingConnectionString"].ConnectionString;

为:

var Connectionstring = ConfigurationManager.ConnectionStrings["Booking.Properties.Settings.BookingConnectionString"].ConnectionString; 

那应该修复对象引用错误。


接下来我要推荐的是你简化你的连接字符串,你不需要所有这些信息,只需使用这样的东西:

<add name="Booking.Properties.Settings.BookingConnectionString"
     connectionString="SERVER=SHARKAWY-PC;UID=sa;PWD=123456;DATABASE=Booking"
     providerName="System.Data.SqlClient" />

接下来我要推荐的是你使用sa帐户即使在测试期间,如果你习惯了它,你将要部署它方式。

我要推荐的最后一件事是你使用参数化查询来防止SQL注入,所以改变你的查询逻辑:

string strsql = "select * from UserInfo,UsersGroup  where UserInfo.GroupID=UsersGroup.GroupID and UserName = '" + UserName + "' and UserPassword='" + txtusername.Text + "'";
cmd = new SqlCommand(strsql, conn);
conn.Open();

dr = cmd.ExecuteReader();

对此:

string strsql = "select * from UserInfo,UsersGroup  where UserInfo.GroupID=UsersGroup.GroupID and UserName = @UserName and UserPassword=@UserPassword";

cmd = new SqlCommand(strsql, conn);
cmd.AddParameterWithValue("@UserName", UserName);
cmd.AddParameterWithValue("@UserPassword", txtusername.Text);

conn.Open();

dr = cmd.ExecuteReader();

答案 1 :(得分:0)

请参阅SQL Server网络配置下的 SQL Server配置管理器,您将找到协议。确保已启用TCP / IP。初始安装后,通常会禁用此功能。