例句:
int age;
sql = "insert into data(username,sex,age)"
+ "values('" + dr["username"].ToString().Replace("'", "''") + "','" + dr["sex"].ToString().Replace("'", "'") + "'," +age + ")";
如果age类型是int,需要写入一个空值,怎么办?总是报错。
insert into access数据库,int类型的字段插入空值怎么写?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
9条回答 默认 最新
- CSDN专家-showbo 2021-09-14 09:03关注
之前回复过题主了。需要判断下数据是否为数字之类的,不是默认一个0或者null(注意是字符串,不能赋值为C#的null),因为组合成sql后会出错,sql没有值
有帮助麻烦点个采纳【本回答右上角】,谢谢~~有其他问题可以继续交流~
int age; if (!int.TryParse(dr["age"].ToString(), out age)) age = 0;//这样,一定要为null,可以赋值为 age="null";这样拼接sql的时候就会变为 insert into data(username,sex,age)values('username','sex',null)" sql = "insert into data(username,sex,age)" + "values('" + dr["username"].ToString().Replace("'", "''") + "','" + dr["sex"].ToString().Replace("'", "'") + "'," +age + ")";
组合SQL语句执行一定要防止sql注入,常用的方法
1)内容替换
字符串类将单引号号替换为实体对象'【&注意是英文状态下,csdn编辑器有问题,直接打英文状态下的实体对象显示不出来】或者直接去掉
数字型,一定要先判断内容,如果是不是数字默认一个值0或者"null"(为null注意数据库字段设置一定要允许为空,要不执行sql会出错)
2)SQL语句参数化,简单示例如下,不过参数化也解决不了类型问题,还是需要自己判断类型后不符合设置为默认值using System; using System.Data.OleDb; using System.Data; namespace ConsoleApp1 { class Program { static void Main(string[] args) { string sql = "insert into data(username,sex,age)values(?,?,?)"; OleDbConnection conn = new OleDbConnection(@"provider=microsoft.ace.oledb.12.0;data source=D:\文件\C#\Console\ConsoleApp1\bin\Debug\data.accdb"); conn.Open(); OleDbCommand cmd = new OleDbCommand(sql, conn); //注意access参数化传入的参数是按照参数出现顺序来添加,顺序能乱,名称随便起,一样也无所谓 cmd.Parameters.Add(new OleDbParameter() { ParameterName = "?", OleDbType = OleDbType.VarWChar, Size = 20, Value = "username的值" }); cmd.Parameters.Add(new OleDbParameter() { ParameterName = "p", OleDbType = OleDbType.VarWChar, Size = 20, Value = "sex的值" }); cmd.Parameters.Add(new OleDbParameter() { ParameterName = "p", OleDbType = OleDbType.Integer, Value = 123 }); cmd.ExecuteNonQuery(); conn.Close(); Console.ReadKey(); } } }
下面这个为我常用的类型判断类库,题主可以用类库判断类型不正确默认一个值
using System; using System.Text.RegularExpressions; /// <summary> /// 数据有效性检查 /// </summary> public class DataCheck { /// <summary> /// 判断内容是否为空 /// </summary> /// <param name="v"></param> /// <returns></returns> public static bool IsNull(string v) { return string.IsNullOrEmpty(v) || v.Trim() == ""; } /// <summary> /// 判断是否为数字(浮点数之类) /// </summary> /// <param name="v"></param> /// <returns></returns> public static bool IsNumeric(string v) { return !IsNull(v) && Regex.IsMatch(v, @"^-?\d+(\.\d+)?$", RegexOptions.Compiled); } /// <summary> /// 判断是否为数字(整形) /// </summary> /// <param name="v"></param> /// <returns></returns> public static bool IsInt(string v) { return !IsNull(v) && Regex.IsMatch(v, @"^-?\d+$", RegexOptions.Compiled); } /// <summary> /// 判断是否为日期 /// </summary> /// <param name="v"></param> /// <returns></returns> public static bool IsDate(string v) { DateTime dt = new DateTime(); return !IsNull(v) && DateTime.TryParse(v, out dt); } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 3无用
悬赏问题
- ¥50 有数据,怎么建立模型求影响全要素生产率的因素
- ¥50 有数据,怎么用matlab求全要素生产率
- ¥15 TI的insta-spin例程
- ¥15 完成下列问题完成下列问题
- ¥15 C#算法问题, 不知道怎么处理这个数据的转换
- ¥15 YoloV5 第三方库的版本对照问题
- ¥15 请完成下列相关问题!
- ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
- ¥15 求daily translation(DT)偏差订正方法的代码
- ¥15 js调用html页面需要隐藏某个按钮