de-vraag
  • 質問
  • タグ
  • ユーザー
通知:
報酬:
登録
登録すると、質問に対する返答やコメントが通知されます。
ログイン
すでにアカウントをお持ちの方は、ログインして新しい通知を確認してください。
追加された質問、回答、コメントには報酬があります。
さらに
ソース
編集
 user1005415
user1005415
質問

テキストボックス入力とSQLクエリの比較

ここで私のコードはC#で、 "行/列のデータが存在しません"と言っていますが、正しく動作させるためにこのコードを改善するにはどうすればよいですか?

db = new OleDbConnection();
db.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + fileName;
db.Open();

string sql = "SELECT * FROM GroupNameNS WHERE GroupName = '" + Groupnametxt.Text.Trim() + "'";

cmd = new OleDbCommand(sql, db);
rdr = cmd.ExecuteReader();

if (Groupnametxt.Text.Trim() == (string)rdr["GroupName"])
{
  MessageBox.Show("Group Name taken, please try another name", "Error in Name", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
  membernumber1.ReadOnly = true;
}
else
{
  sql = "INSERT INTO GroupNameNS VALUES ('" + Groupnametxt.Text.Trim() + "')";
  membernumber1.ReadOnly = false;
  cmd = new OleDbCommand(sql, db);
  rdr = cmd.ExecuteReader();
}
-1 2011-10-27T22:24:47+00:00 2
 LarsTech
LarsTech
編集された質問 27日 10月 2011 в 10:33
プログラミング
sql
c#
database
Nick Rolando
27日 10月 2011 в 10:29
2011-10-27T22:29:27+00:00
さらに
ソース
編集
#56793583

結果セットの行をインクリメントするには、Readerオブジェクトの.Read()を呼び出す必要があります。

rdr.Read();

//読み取るレコードがもうない場合はfalseを返すので、通常は if ステートメントまたは while while ループ内で使用されます

if(rdr.Read())に if(Groupnametxt.Text.Trim()==(文字列)rdr ["GroupName"])テーブルに GroupName という値を持つレコードが少なくとも1つありますが、それはtrueを返します。

            if (rdr.Read())
            {
                MessageBox.Show("Group Name taken, please try another name", "Error in Name", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                membernumber1.ReadOnly = true;
                rdr.Close();
            }
            else
            {
                rdr.Close();
                sql = "INSERT INTO GroupNameNS VALUES ('" + Groupnametxt.Text.Trim() + "')";
                membernumber1.ReadOnly = false;
                cmd = new OleDbCommand(sql, db);
                cmd.ExecuteNonQuery();
            }

I modified a couple other things too: don't forget to close your Reader object after using it. And use ExecuteNonQuery() for an INSERT

0
0
Jim Scott
27日 10月 2011 в 11:03
2011-10-27T23:03:49+00:00
さらに
ソース
編集
#56793584

ここでは、usingキーワードで適切なクリーンアップを行い、ベストプラクティスとしてgroupnameにParameterを追加するためのいくつかの追加の変更があります。

using(OleDbConnection db = new OleDbConnection())
{
    db.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + fileName; 
    db.Open(); 

    string groupName = groupName.Text.Trim();   
    string sql = "SELECT * FROM GroupNameNS WHERE GroupName = '@groupname'"; 

    using(OleDbCommand cmd = new OleDbCommand(sql, db))
    {
        cmd.Parameters.AddWithValue("@groupname", groupName);

        using(OleDbDataReader rdr = cmd.ExecuteReader())
        {       
            if (rdr.Read()) 
            { 
                MessageBox.Show("Group Name taken, please try another name", "Error in Name", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
                membernumber1.ReadOnly = true; 
            } 
            else 
            { 
                sql = "INSERT INTO GroupNameNS VALUES ('@groupname')"; 
                cmd.CommandText = sql;              
                cmd.ExecuteNonQuery();
                membernumber1.ReadOnly = false;         
            } 
        }
    }
}
0
0
質問の追加
カテゴリ
すべて
技術情報
文化・レクリエーション
生活・芸術
科学
プロフェッショナル
事業内容
ユーザー
すべて
新しい
人気
1
Roxana Elizabeth CASTILLO Avalos
登録済み 17時間前
2
Hideo Nakagawa
登録済み 1日前
3
Sergiy Tytarenko
登録済み 3日前
4
shoxrux azadov
登録済み 5日前
5
Koreets Koreytsev
登録済み 1週間前
© de-vraag :年
ソース
stackoverflow.com
ライセンス cc by-sa 3.0 帰属