【问题标题】:execution of stored procedures is not running存储过程的执行没有运行
【发布时间】:2014-10-16 08:22:25
【问题描述】:

我在调用存储过程过滤客户数据时遇到问题。 表:

ID   : CS-001, CS-002, CS-003  
Nama : xxxxxx, xxxxxx, xxxxxx            

C# 中的函数

public DataTable pilihCustomer(string id)
{
    classKoneksi = new koneksi();
    sql = "call PilihCustomer(" + id + ")";
    tabel = new DataTable();

    try
    {
        classKoneksi.koneksiBuka();
        komand = new MySqlCommand(sql, classKoneksi.konek);
        adapter = new MySqlDataAdapter(komand);
        adapter.Fill(tabel);
    }
    catch (Exception) {}

    classKoneksi.koneksiTutup();
    return tabel;
}

我称之为

private void editToolStripMenuItem_Click(object sender, EventArgs e)
{
    if (LvCustomer.SelectedItems.Count > 0)
    {            
        string id = LvCustomer.SelectedItems[0].Text;
        FCustomer f2 = new FCustomer();
        DATA_ACCES.Acces_Customer baca = new DATA_ACCES.Acces_Customer();
        tabel = baca.pilihCustomer(id);
        string  nama = "", npwp = "", tlp = "", fax = "", email="", kontak="";
        foreach (DataRow kolom in tabel.Rows)
        {
            nama = kolom["nama perusahaan"].ToString();
            npwp = kolom["npwp"].ToString();
            tlp = kolom["telepon"].ToString();
            fax = kolom["faxmile"].ToString();
            email = kolom["email"].ToString();
            kontak = kolom["kontak"].ToString();
        }
    }
    else
    {
        MessageBox.Show("Please select an item before assigning a value.");
    }
}

如果表格为

,则可以运行上述函数
ID   : 101, 102, 103  
Nama : xxxxxx, xxxxxx, xxxxxx            

【问题讨论】:

  • 您是否在任何地方定义了 kommand 是存储过程?例如 komand.CommandType = CommandType.StoredProcedure;
  • 你有什么问题?错误信息?没有数据?还有什么?
  • @apomene 好吧,sql 是 "call PilihCustomer(" + id + ")"; - 它有一系列其他问题,但至少间接调用了 proc
  • @Deri:警告 - 请注意您的代码容易受到 SQL 注入的影响,这是一种严重且容易被利用的风险,通过正确的参数化可以轻松避免;您应该将输入值连接到 SQL....永远
  • catch (Exception) { } 让我怀疑它已经在尝试非常非常努力告诉你出了什么问题,但你只是忽略它并继续...... .

标签: c# mysql stored-procedures


【解决方案1】:

id 参数是一个字符串,因此需要用单引号括起来,因此将生成 SQL 的行更改为:

sql = "call PilihCustomer('" + id + "')";

但是,正如其他评论者所说,您的代码非常不安全,您应该使用参数化查询。

【讨论】:

  • 感谢您的解释。对于这段代码,我设法按照 DavidG 的建议使用了单引号,但我想再次学习如何避免 sql 注入。如何解决问题。有什么可以给我举个例子的吗
  • sql 注入 .... ????头疼,嘿嘿嘿……目前,我觉得先简单易学的代码
  • 这比你想象的要容易,我 100% 建议你在继续之前先掠夺它。
  • 我不知道从哪里开始学习。因为我学会了只是依靠互联网的帮助。请帮忙.....
  • 互联网是查找信息的好地方!我刚刚用谷歌搜索了 sql 注入,它显示了this SO link。另外,不要忘记接受答案并在您得到帮助的地方点赞。
猜你喜欢
  • 2016-09-04
  • 1970-01-01
  • 2019-12-03
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
  • 2019-01-19
  • 2014-06-14
  • 1970-01-01
相关资源
最近更新 更多