【问题标题】:Parameter @ must be defined必须定义参数@
【发布时间】:2018-07-12 01:45:49
【问题描述】:

当我的查询太长时,我经常遇到这种情况。我已经定义了参数@no_registrasi,但是还是报错。

MySql.Data.MySqlClient.MySqlException:命令执行过程中遇到致命错误。 ---> MySql.Data.MySqlClient.MySqlException:必须定义参数“@no_registrasi”。

这是我的代码:

        void Tombol_cari_simpanan1Click(object sender, EventArgs e)
    {
        string connectionString = "Server=localhost;User ID=root;Password=;Database=koperasi;Convert Zero Datetime=True;";
        MySql.Data.MySqlClient.MySqlConnection connect = new MySql.Data.MySqlClient.MySqlConnection(connectionString);
        connect.Open();
        string query = "select * from simpanan left join anggota on simpanan.no_registrasi = anggota.no_registrasi left join jenis_simpanan on simpanan.id_jenis_simpanan = jenis_simpanan.id_jenis_simpanan where simpanan.no_registrasi = @no_registrasi";
        MySql.Data.MySqlClient.MySqlCommand myCommand = new MySql.Data.MySqlClient.MySqlCommand(query, connect);
        myCommand.Parameters.AddWithValue("@no_registrasi", int.Parse(textbox_pencarian_no_registrasi.Text));
        MySql.Data.MySqlClient.MySqlDataReader reader=myCommand.ExecuteReader();
        connect.Close();
        mySqlDataAdapter = new MySql.Data.MySqlClient.MySqlDataAdapter(query, connect);
        DataSet DS = new DataSet();
        mySqlDataAdapter.Fill(DS);
        datagrid_simpanan.DataSource = DS.Tables[0];
        connect.Close();    
    }

【问题讨论】:

  • 您调用了myCommand.ExecuteReadermySqlDataAdapter.Fill - 第二个没有为其定义参数。除非你真的打算两次做同样的事情,否则你应该删除其中一个
  • @kevin : 不确定,但我认为在 MySQL 中,查询结束时需要;
  • Thierry V:我尝试了你的建议,但它不起作用。 @JayV:这是有道理的,但我不知道如何向 mySqlDataAdapter 添加参数。你能帮我回答一下吗?
  • 你给connect.Close()打了两次电话。尝试删除第一个。
  • 检查这个答案,它真的帮助了我。 stackoverflow.com/a/21795988/6898760

标签: c# mysql parameters


【解决方案1】:

因为你在MySqlCommand myCommand对象中添加了参数。

但是你也通过mySqlDataAdapter查询,那个对象没有设置任何参数。

从你的代码中关于MySqlCommand myCommand 是不必要的,因为你没有使用

MySql.Data.MySqlClient.MySqlDataReader reader=myCommand.ExecuteReader();

我想你可以试试这个。

void Tombol_cari_simpanan1Click(object sender, EventArgs e)
{
    string connectionString = "Server=localhost;User ID=root;Password=;Database=koperasi;Convert Zero Datetime=True;";
    string query = "select * from simpanan left join anggota on simpanan.no_registrasi = anggota.no_registrasi left join jenis_simpanan on simpanan.id_jenis_simpanan = jenis_simpanan.id_jenis_simpanan where simpanan.no_registrasi = @no_registrasi";

    MySql.Data.MySqlClient.MySqlConnection connect = new MySql.Data.MySqlClient.MySqlConnection(connectionString);
    connect.Open();

    mySqlDataAdapter = new MySql.Data.MySqlClient.MySqlDataAdapter(query, connect);
    DataSet DS = new DataSet();
    mySqlDataAdapter.SelectCommand.Parameters.AddWithValue("@no_registrasi", int.Parse(textbox_pencarian_no_registrasi.Text));
    mySqlDataAdapter.Fill(DS);
    datagrid_simpanan.DataSource = DS.Tables[0];
    connect.Close();
}

注意

我会使用using关键字来包含

MySqlConnection connect = new MySqlConnection(connectionString)

因为当connect对象离开作用域时,它会自动调用IDisposable.Dispose()接口方法。

string connectionString = "Server=localhost;User ID=root;Password=;Database=koperasi;Convert Zero Datetime=True;";
string query = "select * from simpanan left join anggota on simpanan.no_registrasi = anggota.no_registrasi left join jenis_simpanan on simpanan.id_jenis_simpanan = jenis_simpanan.id_jenis_simpanan where simpanan.no_registrasi = @no_registrasi";
DataSet DS = new DataSet();
using (MySqlConnection connect = new MySqlConnection(connectionString))
{
    connect.Open();
    mySqlDataAdapter = new MySqlDataAdapter(query, connect);
    mySqlDataAdapter.SelectCommand.Parameters.AddWithValue("@no_registrasi", int.Parse(textbox_pencarian_no_registrasi.Text));
    mySqlDataAdapter.Fill(DS);
    datagrid_simpanan.DataSource = DS.Tables[0];
}

【讨论】:

    猜你喜欢
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多