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)'有一些无效的参数
答案 0 :(得分:1)
SqlDataReader.GetString
需要int
有一个参数(从零开始)您想要读取哪一列。不是string
。
将此列方法的列号作为要读取的整数传递给该方法。假设您想要读取第一列值并将其添加到combobox1
。
并使用using
statement处理您的SqlConnection
和SqlCommand
之类的内容;
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
您的代码还存在其他一些问题:
预计会出现类似的情况:
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);
}
它会起作用