首页 > 解决方案 > 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");
            }
        }
    }
}

标签: c#

解决方案


正如评论中所解释的,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 版本直接在程序集中有这些重载


推荐阅读