我是c#Windows编程的新手...请帮我解决以下代码错误

时间:2014-02-26 07:56:44

标签: c# sql-server ado.net

void Dataadd()
{
        try
        {
            string connection = "Data Source=CD_PC\\MSSQL;Initial Catalog=example;Integrated Security=True";
            string query = "select * from student; ";
            SqlConnection conn = new SqlConnection(connection);
            conn.Open();
            SqlCommand cmd = new SqlCommand(query, conn);
            SqlDataReader rdr = cmd.ExecuteReader();
            //MessageBox.Show("saved");
            while (rdr.Read())
            {
                string sName = rdr.GetString(""); 
                comboBox1.Items.Add(sName);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

错误:

  

最佳重载方法匹配   'System.Data.Common.DbDataReader.GetString(int)'有一些无效的参数

5 个答案:

答案 0 :(得分:1)

SqlDataReader.GetString需要int有一个参数(从零开始)您想要读取哪一列。不是string

将此列方法的列号作为要读取的整数传递给该方法。假设您想要读取第一列值并将其添加到combobox1

并使用using statement处理您的SqlConnectionSqlCommand之类的内容;

using(SqlConnection conn = new SqlConnection(connection))
{    
   using(SqlCommand cmd = conn.CreateCommand())
   {
     ....
        while (rdr.Read())
        {
            string sName = rdr.GetString(0); 
            comboBox1.Items.Add(sName);
        }
   }
}

答案 1 :(得分:1)

因此,您的错误表明方法System.Data.Common.DbDataReader.GetString(int)具有无效参数。

documentation状态时,您需要将int值传递给它,而不是字符串。

public abstract string GetString(
    int ordinal
)

这反过来意味着他的行string sName = rdr.GetString("");是错误的。 它应该看起来像string sName = rdr.GetString(1);

int参数指出应该读取哪个列。现在我们不知道您想要哪一列,因为您选择*(所有内容),但如果Id是您的第一列,而Name是您的第二列,那么您正在寻找.GetString(1)

答案 2 :(得分:1)

请在提问时请格式化代码!

错误的直接原因在于

 string sName = rdr.GetString(""); // <- GetString requires int, that's Field's index

您的代码还存在其他一些问题:

  1. 不要忘记处理IDisposable实例(使用(...){...})
  2. 不要抓住所有例外而不重新投掷它们
  3. 预计会出现类似的情况:

    void Dataadd() { // <- Probably DataAdd will be better name
      string connection = "Data Source=CD_PC\MSSQL;Initial Catalog=example;Integrated Security=True"; 
    
      // Format your code; let SQL be read as formatted SQL, not long, long line...
      string query = 
        "select *\n" +
        "  from student;"; 
    
      try {
        // Use "using" on IDisposable insatnces
        using (SqlConnection conn = new SqlConnection(connection)) {
          conn.Open();
    
          using(SqlCommand cmd = new SqlCommand(query, conn)) {
            using(SqlDataReader rdr = cmd.ExecuteReader()) {
              while (rdr.Read()) { 
                string sName = rdr.GetString(0); // <- 0 stands for the 1st field; 
    
                comboBox1.Items.Add(sName);  
              }  
            }
          }
        }
      }
      catch (DataException ex) { // <- Never ignore ALL the exceptions: catch(Exception e) 
        MessageBox.Show(ex.Message);
      } 
    }
    

答案 3 :(得分:0)

阅读本文:

http://msdn.microsoft.com/es-es/library/system.data.sqlclient.sqldatareader.getstring(v=vs.110).aspx

SqlReader.GetString将int作为参数而不是字符串;)

答案 4 :(得分:0)

while (rdr.Read())
            {
                string sName = rdr[0]; // replace o with which column u want 
                comboBox1.Items.Add(sName);
            }

它会起作用