问题
This situation often I met when my query is too long. I have defined parameter @no_registrasi, but it still error.
MySql.Data.MySqlClient.MySqlException: Fatal error encountered during command execution. ---> MySql.Data.MySqlClient.MySqlException: Parameter '@no_registrasi' must be defined.
Here is my code:
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();
}
回答1:
Because you add the parameter in MySqlCommand myCommand object.
But you also query by mySqlDataAdapter, that object didn't set any parameter.
from your code of part about MySqlCommand myCommand is unnecessary because you didn't use
MySql.Data.MySqlClient.MySqlDataReader reader=myCommand.ExecuteReader();
I guess you can try this.
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();
}
Note:
I would use using keyword to contain
MySqlConnection connect = new MySqlConnection(connectionString)
becasue when connect object leave the scope it will call IDisposable.Dispose() interface method automaticlly.
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];
}
来源:https://stackoverflow.com/questions/51280676/parameter-must-be-defined