c# - 必须定义参数@

标签 c# mysql parameters

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

MySql.Data.MySqlClient.MySqlException: Fatal error encountered during command execution. ---> MySql.Data.MySqlClient.MySqlException: Parameter '@no_registrasi' must be defined.

这是我的代码:

        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();    
    }

最佳答案

因为你在 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() 接口(interface)方法。

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];
}

关于c# - 必须定义参数@,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51280676/

相关文章:

ruby-on-rails - Rails 参数未传递给 'params' 变量

c - 如何使用命令行提供参数

c# - 获取从 dapper .QueryMultiple 方法返回的结果集/表的数量

c# - 将 async/await 与 DataReader 一起使用? (没有中间缓冲区!)

mysql - 这些 FK 定义是否等价?

具有空/零结果的 MySQL Group By

mysql - 按 2 列的字段值排序 - mysql - delphi - dbgrid

c# - 如何在不向服务器提交 SQL 语句的情况下获取 SqlParameter 的字符串表示形式?

c# - 在设计公共(public) API 时,我们应该避免将 IEnumerable 作为输入吗?

c# - 如何获取复选框的状态