以下代码写入数据库后都是空的,即内容为NULL,实际参数不起作用,为什么呢?麻烦各位帮看看,谢谢。                    string SQL_INSERT_TOPIC = "insert into test values (@id,@title,@type,now())";
                    string PARM_ID = "@id";
                    string PARM_TITLE = "@title";
                    string PARM_TYPE = "@type";            
         
                     OdbcParameter[] parms = new OdbcParameter[]
                     {
                         new OdbcParameter(PARM_ID,OdbcType.Int,4),
                         new OdbcParameter(PARM_TITLE,OdbcType.VarChar,80),
                         new OdbcParameter(PARM_TYPE,OdbcType.Char,1)            
                     };                     parms[0].Value = 20;
                     parms[1].Value = "welcome to beijing";
                     parms[2].Value = 'C';                     OdbcCommand cmd = new OdbcCommand();
                     foreach (OdbcParameter pram in parms)
                         cmd.Parameters.Add(pram);
  
                     cmd.Connection = conn; 
                     cmd.CommandType = CommandType.Text;
                     cmd.CommandText = SQL_INSERT_TOPIC;
          
                     cmd.ExecuteNonQuery();
                     conn.Close();
--以上--

解决方案 »

  1.   

    程序流转问题吧?怎么也应该先设置SQL命令然后再设置参数吧……没耍过这个,不太清楚,关注一下,建议:
     foreach (OdbcParameter pram in parms) 
                            cmd.Parameters.Add(pram); 
    放到
    cmd.Connection = conn; 
                        cmd.CommandType = CommandType.Text; 
                        cmd.CommandText = SQL_INSERT_TOPIC; 
    后面试试
      

  2.   

    cmd.CommandType = CommandType.Text; 不是TEXT..
    是存储过程类型。。
      

  3.   

    写入数据库中都是null 要我说不是参数没起作用 而是整个执行都没有起作用
      

  4.   

    为什么要用Odbc的方式呢?
    从你写SQL语句的语法上判断应该是SQL数据才对。请看我最近写的一篇关于ADO.NET的文章:
    asp.net夜话之七:ADO.NET介绍
    ADO.NET是对Microsoft ActiveX Data Objects (ADO)一个跨时代的改进,它提供了平台互用性和可伸缩的数据访问。由于传送的数据都是XML格式的,因此任何能够读取XML格式的应用程序都可以进行数据处理。事实上,接受数据的组件不一定要是ADO .NET组件,它可以是基于一个Microsoft Visual Studio的解决方案,也可以是任何运行在其它平台上的任何应用程序。以前做数据库访问的时候,需要一直与数据库保持连接,直到获取完所有满足需要的数据之后才会断开数据库连接,这种数据库访问方式称之为连接式数据访问技术。相比于以前的连接式数据访问技术,ADO.NET除了提供连接式数据访问技术之外,还提供了另一种断开式解决方案,那就是在内存中模拟一个数据库,也就是内存中的数据库。我们知道在实际的数据库技术中,每个数据库就是一个业务逻辑单元,一般来说这个数据库包含了实现一个应用软件或者一个网站所需要的全部数据。
      

  5.   

    我使用的是mysql数据库,使用ODBC驱动啊。
      

  6.   

      你用的是 access 数据库  ??? 
      

  7.   

    mssql中 没有now() 函数 获取 时间用 GetDate() 
     汗
      

  8.   

    我用的是mysql,.net驱动不会装,所以用通用的ODBC驱动。
      

  9.   

    代码修改为:
                        string SQL_INSERT_TOPIC = "insert into test values (@id,@title,@type,now())"; 
                        string PARM_ID = @id; 
                        string PARM_TITLE = @title; 
                        string PARM_TYPE = @type;            
            
                        OdbcParameter[] parms = new OdbcParameter[] 
                        { 
                            new OdbcParameter(PARM_ID,OdbcType.Int,4), 
                            new OdbcParameter(PARM_TITLE,OdbcType.VarChar,80), 
                            new OdbcParameter(PARM_TYPE,OdbcType.Char,1)            
                        };                     parms[0].Value = 20; 
                        parms[1].Value = "welcome to beijing"; 
                        parms[2].Value = 'C';                     OdbcCommand cmd = new OdbcCommand(); 
                        foreach (OdbcParameter pram in parms) 
                            cmd.Parameters.Add(pram); 
      
                        cmd.Connection = conn; 
                        cmd.CommandType = CommandType.Text; 
                        cmd.CommandText = SQL_INSERT_TOPIC; 
              
                        cmd.ExecuteNonQuery(); 
                        conn.Close(); 
    你试试!
      

  10.   

    如果你的数据库中id是自增的主键,那么你在插入数据时就不需要给它赋值的。
                        string SQL_INSERT_TOPIC = "insert into test values (@title,@type,now())"; 
                        string PARM_TITLE = "@title"; 
                        string PARM_TYPE = "@type";            
            
                        OdbcParameter[] parms = new OdbcParameter[] 
                        { 
                            new OdbcParameter(PARM_TITLE,OdbcType.VarChar,80), 
                            new OdbcParameter(PARM_TYPE,OdbcType.Char,1)            
                        };                     parms[0].Value = "welcome to beijing"; 
                        parms[1].Value = 'C'; 这样就可以的了。
      

  11.   

    谁再帮看看啊,还是没搞定,是否是ODBC驱动不能用参数?
      

  12.   

    问题解决了。总结一下:
    1.mysql数据库驱动有两种:mysql-connector-odbc和mysql-connector-net,
      前者不支持参数,后者支持,这是我测试的结果;
    2.参数变量使用跟SqlServer一样,只需把@变为?,
       如,mysql中写为:insert into test values (?id,?title,?type,now())"; 
    3.使用mysql-connector-net驱动很简单,到网上下载mysql-connector-net-5.2.3-src,
       解压后,把mysql.data.dll添加到项目的bin文件夹即可使用;
    4.连接本机mysql数据库方法例子如下:
      string connStr = "server=localhost;user id=root; password=yourPassword;database=yourDatabase";
      MySqlConnection conn = new MySqlConnection(connStr); 下面附上测试通过的代码:
                   string connStr = "server=localhost;user id=root; password=***; database=test";
                 MySqlConnection conn = new MySqlConnection(connStr);
                 if (conn != null)
                     conn.Open();
                 else
                     return;                       string SQL_INSERT_TOPIC = "insert into test values (null,?title,?type,now())";
                   string PARM_TITLE = "?title";
                   string PARM_TYPE = "?type";            
                   MySqlParameter[] parms = new MySqlParameter[]
                   {
                     new MySqlParameter(PARM_TITLE,MySqlDbType.VarChar,80),
                     new MySqlParameter(PARM_TYPE,MySqlDbType.VarChar,1)            
                    };
                    parms[0].Value = "welcome to beijing";
                    parms[1].Value = "C";                MySqlCommand cmd = new MySqlCommand();
                    cmd.Connection = conn;
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = SQL_INSERT_TOPIC;                foreach (MySqlParameter pram in parms)
                       cmd.Parameters.Add(pram);                cmd.ExecuteNonQuery();
                    conn.Close();    --以上--
      

  13.   

    只需把参数以及定义参数时的@换成?即可,果然是这个问题,但是怎么修改mysql数据库驱动为mysql-connector-net,呢,我装的是5.1的。