c# - C# - CS1503 - 参数 1:无法从 'string' 转换为 '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 版本直接在程序集中有这些重载
推荐阅读
- react-native - 只有初始插值不透明度和缩放值传递给有条件渲染的 Animated.View。值不会根据 Pan Gesture 改变
- c++ - 派生类的原始类型数据成员可以用作其基本构造函数的参数吗?
- excel - Excel中如何根据分组表做表映射实现分组求和?
- python - Python pandas 绘制移动secondary_yaxis(kind='line')
- powershell - Azure OAuth 2.0 设备代码在启动时添加到浏览器
- javascript - 以动态方法获取选定的单选按钮值
- html - 问题 - 以闪亮的方式更改 SidePanel 的背景颜色也会导致渲染图中的颜色发生变化
- python - 在 tkinter 中运行 mainloop 后更新文本
- ios - 预定的 IOS 本地通知每分钟重复一次
- c++ - #include 在 C++ 枚举中的作用