[英]C# - CS1503 - Argument 1: cannot convert from 'string' to 'int'
在你回复之前,我一遍又一遍地检查了我的代码,现在也搜索了大约一个小时来寻找类似的答案。 编译器不断抛出错误 CS1503,我不确定如何解决这个问题。 它位于第 36 行和第 37 行,我已经注释了有错误的行,即第 36 行和第 37 行。它用于应该搜索车牌并在表中输出其他数据的数据库。
public partial class Login : Form
{
string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=J:\Plate Reader\DB\InfoDB.mdf;Integrated Security=True;Connect Timeout=30";
SqlDataReader mdr;
public Login()
{
InitializeComponent();
}
private void btnSearch_Click(object sender, EventArgs e)
{
using (SqlConnection sqlCon = new SqlConnection(connectionString))
{
sqlCon.Open();
string selectQuery = "SELECT * From Plate WHERE Plate='" + txtPlate.Text;
SqlCommand command = new SqlCommand(selectQuery, sqlCon);
mdr = command.ExecuteReader();
if (mdr.Read())
{
labelName.Text = mdr.GetString("Name"); //Right here
labelWanted.Text = mdr.GetInt32("Bounty").ToString(); //and here
}
else
{
MessageBox.Show("No Data For This Plate");
}
}
}
}
正如注释中所解释的,GetString 和 GetInt32 都需要一个整数类型的参数。 该整数是该字段在“选择字段”列表中的位置。 如果你不想使用一个职位,你可以写
labelName.Text = mdr.GetString(mdr.GetOrdinal("Name"));
并且这个简单的行可以很容易地转换为扩展方法,将方法添加到静态类,其代码为
public static class ReaderExtensions
{
public static string GetString(this SqlDataReader source, string fieldName)
{
return source.GetString(source.GetOrdinal(fieldName));
}
}
这最终允许你写
string labelText = mdr.GetString("Name");
当然,对于接受字段名称的 GetInt32 也可以编写相同的内容。 顺便说一句,如果我没记错的话,MySql 版本在程序集中直接有这些重载
原因是GetString(i)
和GetInt32(i)
方法需要从零开始的列序号作为参数。 如果要按名称从列中检索数据,则应使用indexer :
labelName.Text = mdr["Name"].ToString();
labelWanted.Text = mdr["Bounty"].ToString();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.