将文本框输入与sql查询进行比较

时间:2011-10-27 22:24:48

标签: c# sql database

这是我在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();
}

2 个答案:

答案 0 :(得分:0)

您需要在Reader对象上调用.Read(),以便增加结果集的行。

rdr.Read();

//注意如果没有更多的记录要读取,这将返回false,因此通常在内部使用if语句或while循环

您可以将if (Groupnametxt.Text.Trim() == (string)rdr["GroupName"])更改为if(rdr.Read()),因为如果表格中至少有1条记录具有此GroupName值,则会返回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();
            }

我还修改了其他一些东西:使用后不要忘记关闭Reader对象。并use ExecuteNonQuery() for an INSERT

答案 1 :(得分:0)

以下是一些其他更改,以确保使用using关键字进行正确清理,并为组名添加参数作为最佳做法。

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;         
            } 
        }
    }
}