string sqlstr = "INSERT INTO [dbo].[ABC] ([ID],[NAME],[AGE]) "
            +"VALUES ('"+tbName.Text+"',"+tbAge.Text+");";以上生成的sql字符串在tbName.Text和tbAge.Text不为空的时候可以正常执行,生成字符串如下:
INSERT INTO [dbo].[ABC] ([ID],[NAME],[AGE]) VALUES ("ABC",18);
但是在tbAge.Text为空的时候会生成如下不能执行的sql字符串:
INSERT INTO [dbo].[ABC] ([ID],[NAME],[AGE]) VALUES ("ABC",);可以通过SqlCommand来解决:
string sqlstr2 = "INSERT INTO [dbo].[ABC] ([ID],[NAME],[AGE]) "
            +"VALUES (@xm,@age);";
        SqlCommand sqlcom = new SqlCommand(sqlstr2);
        sqlcom.Parameters.Add("@xm", SqlDbType.NVarChar).Value = tbName.Text;
        sqlcom.Parameters.Add("@age", SqlDbType.Int).Value = tbAge.Text;但是我的页面有三个功能模块要执行数据库的INSERT操作,我把每个模块写为一个函数,该函数都返回可用于执行的sql字符串,然后在页面的submit Button 事件中连接这三个sql字符串,再用数据库的Transaction一次执行,因此就没法使用sqlcommand来串联sql字符串。对于众多的TextBox,有的不能为空,我加了验证控件,有的可以为空,就会产生类似于INSERT INTO [dbo].[ABC] ([ID],[NAME],[AGE]) VALUES ("ABC",)这样的错误sql。求解决办法?

解决方案 »

  1.   

    string sqlstr = "INSERT INTO [dbo].[ABC] ([ID],[NAME],[AGE]) "
                +"VALUES ('"+tbName.Text+"','"+tbAge.Text+"');";
      

  2.   

    如果需要默认值怎么办?比如,没有输入age的,用20来代替。
    难道要重写个TextBox控件,加上个DefaultValue属性?
      

  3.   

    string sqlstr = "INSERT INTO [dbo].[ABC] ([ID],[NAME],[AGE]) "
      +"VALUES ('"+tbName.Text+"','"+(tbAge.Text == "" ? "20" : tbAge.Text)+"');";
      

  4.   

    这样一来我的sql就长了去了。
      

  5.   

    自定义数据库操作类DAL
    Moddel实体赋值属性
      

  6.   

    本人不才,在此方面无经验。有示范代码么?
    本来想详细了解那个PetShop后再开展项目的,无奈里面的东西太多不能理解。
    于是自己摸索着直接操作sql来做了。我这个项目比较小,纯属入门的。
      

  7.   

    看看petshop就行了
    cnblogs里有很多介绍petshop文章
      

  8.   

    Windows源代码长了去了。
    Linux源代码长了去了。
    他们都没有水平。
      

  9.   

    string age=(tbAge.Text=="" ? 20:tbAge.Text);string sqlstr = "INSERT INTO [dbo].[ABC] ([ID],[NAME],[AGE]) VALUES"
           sqlstr+="('"+tbName.Text+"','"+age+"');";
                
      

  10.   

    Lz你掉了个单引号
    string sqlstr = "INSERT INTO [dbo].[ABC] ([ID],[NAME],[AGE]) "
                +"VALUES ('"+tbName.Text+"','"+tbAge.Text+"');";
      

  11.   

    在实体类里面这样写
        private string age;    public string Age
        {
            get { return age; }
            set
            {
                age == "" ? 20 : age = value;        }
        }ok?
      

  12.   

    你点防SQL注入的代码呗