1

私はvisualstudio.net2010でログインページを書いています。(c#)いくつかのメソッドが含まれているクラスを作成しました。これも :

namespace SchoolsNetwork
{
public class cUsers2
{
    SqlConnection SchoolsDBConnectionString;
    SqlDataAdapter sda;
            SqlCommandBuilder scb;
 SqlConnection(ConfigurationManager.ConnectionStrings
 "SchoolsDBConnectionString"].ConnectionString);


public DsUsers2  Checkpassword(string UserName, string password,out bool Success)
    {
        DsUsers2 dsUsers=new DsUsers2();
        string SqlStr="select * from tblMembers  where Username='"+UserName+"' and Password='"+password+"'";
        sda.SelectCommand=new SqlCommand(SqlStr,SchoolsDBConnectionString);

        sda.Fill(dsUsers.tblMembers);
        Success=dsUsers.tblMembers.Rows.Count>0;
        return dsUsers ;
    }

次に、form.aspxページに、ユーザー名とパスワードを入力するためのテキストフィールドと、クリックしてログインするためのボタンがあります。ボタンのコードは次のとおりです。

protected void Button1_Click(object sender, EventArgs e)
    {
        if (txtuser.Text.Trim().Length>0 && txtpass.Value.Length>0 )
        {  
            cUsers2 cUsers=new cUsers2();
            DsUsers2 dsUser=new DsUsers2();
            bool Success;
            if (txtuser.Text.Trim()=="admin")
            {
                Success=cUsers.CheckAdminPass(txtuser.Text.Trim(),txtpass.Value.Trim());  
                if (Success)
                {
                    Response.Redirect("WebForm2.aspx");
                }
            }

            dsUser=cUsers.Checkpassword(txtuser.Text.Trim(), txtpass.Value.Trim(),out Success);
            if(Success)
            {
                Session["ID"]=dsUser.tblMembers.Rows[0][dsUser.tblMembers.IDUserColumn].ToString();
                System.Web.HttpContext.Current.Response.Redirect("frmProfile.aspx");

            }
            else lblerror.Text="invalid username & password";

        }
    }

web.configで私はこれをconnectionstringとして持っています:

<configuration>

  <connectionStrings>
    <add name="ApplicationServices" connectionString="data     source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
  providerName="System.Data.SqlClient" />
    <add name="SchoolsDBConnectionString" connectionString="
Data Source=Sunny-LPTP\SQLEXPRESS;Initial Catalog=SchoolsDB;Integrated Security=True"
  providerName="System.Data.SqlClient" />
  </connectionStrings>

デバッグ後、この行はエラーとして示されます:

sda.SelectCommand=new SqlCommand(SqlStr,SchoolsDBConnectionString);

それは言う

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

誰か助けてくれませんか?ありがとう

4

4 に答える 4

1

sda のインスタンスを作成する必要があります。

SqlDataAdapter sda = new SqlDataAdapter(SELECT_STMT, CONNECTION)

// according to your project
SqlDataAdapter sda = new SqlDataAdapter(SqlStr,SchoolsDBConnectionString);

MSDN SqlDataAdapter コンストラクターを参照してください

さらに、 SQL インジェクションを本当に気にする必要があります。SqlParametersを利用します。

考慮すべき事項

  • ブロックの使用
  • 文字列連結の代わりに SqlParameter
  • ExecuteScalar を使用して 1 つの値のみにアクセスする / DataAdapter.Fill を使用してテーブルを取得する

コードの大まかな例は次のとおりです。

using (SqlConnection con = new SqlConnection(CONNECTION_STRING))
{
    string selStmt = "select count(*) from ABC where username=@username and passwort=@password";
    SqlCommand cmd= new SqlCommand (selStmt, con);

    cmd.Parameters.Add("@username", SqlDbType.Varchar);
    cmd.Parameters["@username"].Value = USERNAME_FROM_TEXTBOX

    cmd.Parameters.Add("@password", SqlDbType.Varchar);
    cmd.Parameters["@username"].Value = PASSWORD_FROM_TEXTBOX

    return int.Parse(cmd.ExecuteScalar().ToString()) > 0;
}
于 2012-09-20T14:00:21.547 に答える
0

オブジェクトを使用していますがSchoolsDBConnectionString、初期化されておらず、定義されているだけです。

次のことを試してみてください。

SqlConnection SchoolsDBConnectionString = new SqlConnection(ConfigurationManager.ConnectionStrings["SchoolsDBConnectionString"].ConnectionString);

最近、フィールドSqlDataAdapter sdaを初期化せずに定義しました。
したがって、次のように記述します。

SqlDataAdapter sda = new SqlDataAdapter(YourQueryVariable, SchoolsDBConnectionString);
于 2012-09-20T14:09:21.040 に答える
0

「sda」オブジェクトを初期化していないため、この例外が発生しているようです。

SqlDataAdapter sda;

初期化する必要があります:

sda = new SqlDataAdapter(...);
于 2012-09-20T14:01:28.930 に答える
0

使用する前にオブジェクトインスタンスを作成する必要があります

// call constructor before you use code 
 sda = new SqlDataAdapter();       
 sda.SelectCommand=new SqlCommand(SqlStr,SchoolsDBConnectionString);
于 2012-09-20T14:01:51.147 に答える