【问题标题】:Connect C# app with SQL Server 2008 via network通过网络将 C# 应用程序与 SQL Server 2008 连接
【发布时间】:2012-10-10 11:45:09
【问题描述】:

我在尝试连接时出错

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

该应用程序正在我的笔记本电脑上使用 SQL Server 数据库运行,但我需要在我的笔记本电脑上连接该应用程序并通过网络与我的 PC (Sharkawy-PC) 上的 SQL Server 连接我需要有关 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();
    }

这是我在 app.config 中的连接

<add name="Booking.Properties.Settings.BookingConnectionString"
     connectionString="DRIVER=SQL Server;SERVER=SHARKAWY-PC;UID=sa;PWD=123456;APP=Microsoft® Windows® Operating System;WSID=SHARKAWY;DATABASE=Booking;Network=DBMSSOCN"          
     providerName="System.Data.SqlClient" />

【问题讨论】:

  • 请参阅connectionstrings.com 了解大量的连接字符串库(及其含义的解释)。我会尝试:connectionString="server=SHARKAWY-PC;database=booking;UID=sa;PWD=123456;" - 我会建议从不使用sa 帐户,并且始终使用参数化查询(而不是将您的 SQL 语句和执行它们.....)
  • 那个错误是在哪一行抛出的?
  • 你能用 SSMS 连接电脑吗?
  • 然后浏览网页以查找 Using 关键字。这会很有帮助。
  • 服务器上是否有多个实例?

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


【解决方案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();

【讨论】:

  • @AhmedSharkawy,很高兴能为您提供帮助。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多