//如果是 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(); } }
为了安全可靠,最好都指定数据类型,免得后患。。。。。。!!
MS SQL Server 不能自动判断