繁体   English   中英

C# - CS1503 - 参数 1:无法从“字符串”转换为“整数”

[英]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 版本在程序集中直接有这些重载

GetInt32需要一个“int”参数。

您正在传递一个字符串。

您需要发送的顺序位置

改用这个:

mdr.GetInt32(mdr.GetOrdinal("Name"));

您可能需要考虑使用像 Dapper 这样的微型 ORM 来使事情变得更容易。

原因是GetString(i)GetInt32(i)方法需要从零开始的列序号作为参数。 如果要按名称从列中检索数据,则应使用indexer

labelName.Text = mdr["Name"].ToString();  
labelWanted.Text = mdr["Bounty"].ToString();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM