使用SqlDataReader rdr(1)的麻烦 [英] Troubles with a SqlDataReader rdr(1)

查看:67
本文介绍了使用SqlDataReader rdr(1)的麻烦的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

错误代码:

'rdr(1)'是'变量',但用作'方法'



ftpTable的第二列。

Error Code:
'rdr(1)' is a 'variable' but is used like a 'method'

The second column of "ftpTable".

try
{
   string connStr3 = ConfigurationManager.ConnectionStrings["FTPdb"].ConnectionString;
   string cmdStr3 = "SELECT * FROM [ftpTable];";
   using (SqlConnection conn3 = new SqlConnection(connStr3))
   {
      using (SqlCommand cmd3 = new SqlCommand(cmdStr3, conn3))
      {
         conn3.Open();
         using (SqlDataReader rdr = cmd3.ExecuteReader())
         {
            while (rdr.Read())
            {
               if (rdr(1).ToString() == DropDownList2.Text)
               {
                  goto match;
               }
            }
         }
         cmd3.Dispose();
         conn3.Close();
         conn3.Dispose();
      }
   }
}
catch (Exception ex) { Label1.Text = "Search SELECT for Match: " + ex.ToString(); }

推荐答案

1。在rdr之前使用'var'



使用(var rdr = ....)



2。使用'return'退出void方法。



3.要获取datareader中列的值,请使用GetValue(int i)方法,其中i为0列的索引(即0是第一个)。 (rdr.GetValue(1)在你的情况下)
1. use 'var' before rdr

using(var rdr = ....)

2. use 'return' to exit from void method.

3. To get value of a column in datareader, use GetValue(int i) method where i is the 0 based index of the column (i.e. 0 is first). (rdr.GetValue(1) in your case)


我会这样做

I would do as below
bool matchFount = false;
string connStr3 = ConfigurationManager.ConnectionStrings["FTPdb"].ConnectionString;
string cmdStr3 = "SELECT * FROM [ftpTable];";
using (SqlConnection conn3 = new SqlConnection(connStr3))
using (SqlCommand cmd3 = new SqlCommand(cmdStr3, conn3))
{
    conn3.Open();
    using (SqlDataReader rdr = cmd3.ExecuteReader())
    {
        while (rdr.Read())
        {
            if (rdr[1].ToString() == DropDownList2.Text)
            {
                matchFount = true;
                break;
            }
        }
    }
}

//some code ...

if (matchFount)
{
    // do something , maching record found 
}



但是如果你需要检查数据库中是否存在匹配记录。您可以将一些参数发送到数据库并直接获取记录计数如下。




but again if you need to check whether matching record exist or not in the database. you can send some parameters to database and get the record count directly like below.

bool matchFount = false;
string connStr3 = ConfigurationManager.ConnectionStrings["FTPdb"].ConnectionString;
string cmdStr3 = "SELECT count(*) FROM [ftpTable] where [secondColName] =@colVal";
using (SqlConnection conn3 = new SqlConnection(connStr3))
using (SqlCommand cmd3 = new SqlCommand(cmdStr3, conn3))
{
    cmd3.Parameters.AddWithValue("@colVal", DropDownList2.Text);
    conn3.Open();
    int? rowcount = (int?)cmd3.ExecuteScalar();
    matchFount = rowcount > 0;
}


这篇关于使用SqlDataReader rdr(1)的麻烦的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆