1

接続しようとするとエラーが発生する

オブジェクト参照がオブジェクト インスタンスに設定されていません。

アプリはラップトップで SQL Server データベースを使用して動作していますが、ラップトップでアプリを接続し、Sharkawy-PCネットワーク経由で 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" />
4

2 に答える 2

1

あなたがする必要があることの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();
于 2012-10-10T11:51:23.650 に答える
0

SQL Server ネットワーク構成の下にある SQL Server 構成マネージャーを参照してください。プロトコルが見つかります。TCP/IP が有効になっていることを確認します。最初のインストール後、これは通常無効になっています。

于 2012-10-10T11:53:33.490 に答える