刚学用C#,有很多不清楚,请大家不吝赐教。
我用C#来写关于数据库查询的程序,当语句要用到参数时,我是这样写的
...
 string cstr = ".....";
 SqlConnection cnn = new SqlConnection(cstr);
 string sql = "select * from base_resource_tb_user where departmentid = @departid";
 SqlCommand cmd = new SqlCommand(sql); cmd.Connection = cnn;
 cmd.Parameters.Add(new SqlParameter("@departid", "0")); cnn.Open();
 IDataReader reader = cmd.ExecuteReader();
...
现在的问题是,当数据库是MS-SQL Server时,程序能正确地运行,但当我将数据库换成是MySQL,并同时将 SqlConnection换成MySqlConnection,SqlCommand 换成 MySqlCommand时,程序就不能正常工作了,究其原因在于参数的写法,经试验在MySQl中要将参数写成是
 string sql = "select * from base_resource_tb_user where departmentid = ?departid";
 SqlCommand cmd = new SqlCommand(sql); cmd.Connection = cnn;
 cmd.Parameters.Add(new SqlParameter("?departid", "0"));
即将@改为?,这样才能正常运行?但MS-SQL Server却不能使用?作参数符。为什么这么奇怪?我原来用Delphi的话,无论是那一种数据库,还是那一种的数据接口(ADO,BDE,DAC等等)都是统一用:的,为什么C#这么奇怪?

解决方案 »

  1.   

     cmd.Parameters.Add("?","0")); 
    ==
    这样就行,对于MySQL这类的数据库,不认参数的名字,只认参数的顺序所有尤其是更新语句要小心
      

  2.   

    那么想问一下,如果数据库换成是Oracle的话,参数又该如何去写,知的大侠麻烦整个列一下,谢谢。
    ----
    之前我用Delphi写过一个通用的查询器的,现在想来,如果用C#去写的话,要注意这些问题了
      

  3.   

    晕死,怎么都不一样的啊~~~,Anders Hejlsberg 在设计C#的时候,难道没有想想之前的孩子(Delphi)是怎样处理这些问题的吗?
    再晕~~
      

  4.   

    除了SQL Server,其他基本都是?替代即可,oracle我没有实际开发用过,只是见别人这样写过
      

  5.   

    刚才试过了,Oracle是用 : 的,唉~~~,真奇怪,为什么不统一一下呢?统一又有什么难呢~