日期:2014-05-18  浏览次数:20804 次

MSsql 可以自动判断数据类型吗?还是 SqlParameter类做的自动判断好像不是后者
C# code

    //如果是 mssql SqlParameter("@name","郭德纲")这样写,完全可以,而 ACCESS中 却要为每个参数类型 小心地指定 数据类型!
    //我想知道这是数据库的问题,还是.net的问题? 
    // MSsql 可以自动判断数据类型吗?还是 SqlParameter类做的自动判断好像不是后者
    public class test
    {
        public static void method()
        {
            //SqlParameter
            string sql = "insert into Tab_User(name,age,birthday,gongzi,sex) values(@name,@age,@birthday,@gongzi,@sex)";
            OleDbConnection ocon = new OleDbConnection();
            ocon.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\myData.accdb;Persist Security Info=False";
            ocon.Open();
            OleDbCommand ocmd = new OleDbCommand();
            ocmd.Connection = ocon;
            ocmd.CommandText = sql;
            //如果是 mssql 这么写就没问题,完全可以
            //OleDbParameter[] opars= {
            //                            new OleDbParameter("@name","郭德纲")
            //                           ,new OleDbParameter("@age",38)
            //                           ,new OleDbParameter("@birthday",DateTime.Now.AddMonths(-38*12))
            //                           ,new OleDbParameter("@gongzi",5000000)
            //                           ,new OleDbParameter("@sex",true)
            //                        };
            //而 ACCESS中 却要为每个参数类型 小心地指定 数据类型!
            OleDbParameter[] opars = {
                                        new OleDbParameter("@name",OleDbType.LongVarWChar)
                                       ,new OleDbParameter("@age",OleDbType.Integer)
                                       ,new OleDbParameter("@birthday",OleDbType.Date)
                                       ,new OleDbParameter("@gongzi",OleDbType.Double)//工资 双精度
                                       ,new OleDbParameter("@sex",OleDbType.Boolean)
                                    };
            opars[0].Value = "郭德纲";
            opars[1].Value = 38;
            opars[2].Value = DateTime.Now.AddMonths(-38 * 12);
            opars[3].Value = 5000000.12;
            opars[4].Value = true;
            foreach(OleDbParameter p in opars)
            {
                ocmd.Parameters.Add(p);
            }
            ocmd.ExecuteNonQuery();
            ocon.Close();
        }
    }




------解决方案--------------------
SqlParameter具有类型转换,可以将(如果你不写的话).net类型转换为sql server类型声明(SqlDbType)。
------解决方案--------------------
oleparameter,看起来跟你说的一样,必须自己制定OleDbType。