0

Webサービスから特定のレコードを返したい。それでも私が成功したのは、次のコードですべてのレコードを取得したことです。

 SqlConnection con;
    SqlDataAdapter adap;
    DataSet ds;
    [WebMethod]
    public DataSet Getmember()
    {

        con = new SqlConnection(@"Data Source=SQLDOTNET\MSSQLSERVER2008;Initial Catalog=doctor;Persist Security Info=True;User ID=sa;pwd=test123#;");
        adap = new SqlDataAdapter("select * from tblusers", con);
        ds = new DataSet();
        adap.Fill(ds, "tblusers");
        return ds;
    }

次のコードを試したため、Emailidで特定のレコードを取得したいと思います。

SqlConnection con;
    SqlDataAdapter adap;
    DataSet ds;
    [WebMethod]
    public DataSet Getmember(String Emailid)
    {
        Emailid = "test@test.com";
        con = new SqlConnection(@"Data Source=SQLDOTNET\MSSQLSERVER2008;Initial Catalog=doctor;Persist Security Info=True;User ID=sa;pwd=test123#;");
        adap = new SqlDataAdapter("select * from tblusers where EmailAddress=" + Emailid, con);
        ds = new DataSet();
        adap.Fill(ds, "tblusers");
        return ds;
    }

しかし、このコードは次のエラーをスローします。

System.Data.SqlClient.SqlException: Invalid column name 'test@test.com'.

私を助けてください..

4

4 に答える 4

0

SQLでは、文字列リテラルを一重引用符で囲む必要があります。

"select * from tblusers where EmailAddress = '" + Emailid + "'"

ただし、これによりSQLインジェクション攻撃が発生する可能性があるため、お勧めしません。Emailid(に設定された場合に何が起こるかを調べ"' OR 1=1 OR ''='"ます。)

Emailid代わりに、パラメータ値として指定する必要があります。

var cmd = new SqlCommand("select * from tblusers where EmailAddress = ?");
cmd.Parameters.Add(Emailid);
adap = new SqlDataAdapter(cmd, con);
于 2012-10-04T05:55:30.097 に答える
0

これが私がしばらくの間C#を使用していない原因になるかどうかわからない

私はあなたのエラーがこの部分にあると思います

select * from tblusers where EmailAddress=" + Emailid

に変更してみてください

"select * from tblusers where EmailAddress='" + Emailid + "'"
于 2012-10-04T05:54:37.737 に答える
0

変更

Emailid = "test@test.com";

Emailid = "'test@test.com'";

emailidの周りの余分な一重引用符に注意してください

于 2012-10-04T05:53:33.853 に答える
0

最初はSQLパラメータを使用する必要があります...プレーンSQLクエリではないので、SQLパラメータをよりよく確認してください

adap = new SqlDataAdapter("select * from tblusers where EmailAddress=" + Emailid, con);

に変更する必要があります

adap = new SqlDataAdapter("select * from tblusers where EmailAddress='" + Emailid + "'", con);

クエリに「'」が含まれていない..ステートメントの構文をよく見てください...

于 2012-10-04T05:53:56.647 に答える