代码如下,求哪位指点一下哪里的问题啊,谢谢了!   public int Insert(string id, string msid, string deptid, string postid,int age, string name, string sex, string phone, Byte[] photo, string vcomment)
        {
            string sconn = dbService.GetScon();
            OdbcConnection conn = new OdbcConnection(sconn);
             
            string sql = "insert into STAFFINFO(STAFF_FNBR,STAFFNAME,MSFNBR,SEX,DEPARTMENTS,POSTFNBR,AGE,PHONE,PHOTO,vComment) values"
               + "(?id,?name,?msid,?sex,?deptid,?postid,?age,?phone,?photo,?comment)";
             OdbcCommand cmd = new OdbcCommand(sql, conn);
            cmd.Parameters.Add("?id",OdbcType.VarChar).Value=id;
            cmd.Parameters.Add("?msid", OdbcType.VarChar).Value = msid;
            cmd.Parameters.Add("?deptid", OdbcType.VarChar).Value = deptid;
            cmd.Parameters.Add("?postid", OdbcType.VarChar).Value = postid;
            cmd.Parameters.Add("?age", OdbcType.Int).Value = age;
            cmd.Parameters.Add("?name", OdbcType.VarChar).Value = name;
            cmd.Parameters.Add("?sex", OdbcType.VarChar).Value = sex;
            cmd.Parameters.Add("?phone", OdbcType.VarChar).Value = phone;
            if (photo == null)
            {
                cmd.Parameters.Add("?photo", OdbcType.VarBinary).Value = DBNull.Value;
            }
            else
            {
                cmd.Parameters.Add("?photo", OdbcType.VarBinary).Value = photo;
            }
            cmd.Parameters.Add("?comment", OdbcType.VarChar).Value = vcomment;
            try
            {
                conn.Open();
                int num = cmd.ExecuteNonQuery();
                return num;
            }
            catch (Exception ex)
            {
                return 0;
            }
            finally
            {
                conn.Close();
                conn.Dispose();
            }
        }

解决方案 »

  1.   

    ?phone两个相同的参数 cmd.Parameters.Add("?phone", OdbcType.VarChar).Value = phone;
      

  2.   

    cmd.Parameters.Add("?phone", OdbcType.VarChar).Value = phone;
                if (photo == null)
                {
                    cmd.Parameters.Add("?photo", OdbcType.VarBinary).Value = DBNull.Value;
                }
                else
                {
                    cmd.Parameters.Add("?photo", OdbcType.VarBinary).Value = photo;
                }
    这三个之中你是不是要ADD两个相同的参数?
      

  3.   

    if (photo == null)
                {
                    cmd.Parameters.Add("?photo", OdbcType.VarBinary).Value = DBNull.Value;
                }
                else
                {
                    cmd.Parameters.Add("?photo", OdbcType.VarBinary).Value = photo;
                }
    用OdbcType.VarBinary改成OdbcType.Image,而且用OdbcType.VarBinary的大小是8000,也就8K不够,这你的图片得多小.....不过一般数据库不存在图片,只存放图片的路径
      

  4.   

    你们都不会看错误提示吗?显然是SQL语句的错误,ODBC的参数化查询写法自己去这里看:http://msdn.microsoft.com/ZH-CN/library/8as9zw9k(v=VS.110,d=hv.2).aspx
    看到了吗?只能是一个问号代表一个参数,你从哪里学来的问号后面跟参数名的?ODBC不支持指定参数名,你看最终解析的SQL语句啊,每个参数都值替换了问号的部分,后面你多余的参数名如实的放了上去,不出错才怪了。想通过参数名进行查询,只能用MySql官方提供的.NET驱动。
      

  5.   

    一语惊醒梦中人啊,谢谢了!以前没用过则ODBC的参数化,也是第一次用Mysql,嘿嘿,涨知识了
      

  6.   

    我能问个问题嘛?
      这个是cmd.pParametera.add("?Name").value=Name.NET在MySQL中添加数据的不?cmd.pParametera.add("@Name").value=Name 在MySQL中是不是不支持