必须定义参数@ [英] Parameter @ must be defined

查看:99
本文介绍了必须定义参数@的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当查询时间过长时,经常会遇到这种情况.我已经定义了参数@no_registrasi,但是它仍然出错.

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:命令执行期间遇到致命错误. ---> MySql.Data.MySqlClient.MySqlException:必须定义参数'@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对象中添加了参数.

Because you add the parameter in MySqlCommand myCommand object.

但是您也可以通过mySqlDataAdapter查询,该对象没有设置任何参数.

But you also query by mySqlDataAdapter, that object didn't set any parameter.

部分有关MySqlCommand myCommand的代码,因为您没有使用

from your code of part about MySqlCommand myCommand is unnecessary because you didn't use

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()接口方法.

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

这篇关于必须定义参数@的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆