在早上帖子里的
  public int ExecuteSQL(String SqlString)
        {
            int count = -1;
            Open();
            try
            {
                SqlCommand cmd = new SqlCommand(SqlString, conn);
                count = cmd.ExecuteNonQuery(); //执行SQL语句
            }
            catch
            {
                count = -1;
            }
            finally
            {
                Close();
            }
            return count;
        }
当我输入的登录名为数字的时候不会出错,要是输入zl4460072   catch就会报错
报错提示: 在此上下文中不允许使用 'zl4460072'。此处只允许使用常量、表达式或变量。不允许使用列名。
饿·· 不知道怎么该

解决方案 »

  1.   

    你的SqlString是什么
    肯定是你这里错了
      

  2.   

    SqlString    "Insert into [User] (Email,Address,UserName,HomePage,LoginName,PassWord) Values(1,1,1,1,zl4460072,1)" string
      

  3.   

    表结构发出来
    设置user表字段LoginName的数据类型为varchar(255)
      

  4.   

    晕了
    你Email什么的值都不加单引号??
    SqlString    "Insert into [User] (Email,Address,UserName,HomePage,LoginName,PassWord) Values('1','1','1','1','zl4460072','1')" 
      

  5.   

    CREATE TABLE [User] (
    [UserID] [int] IDENTITY (1, 1) NOT NULL ,
    [LoginName] [varchar] (50) NOT NULL ,
    [UserName] [varchar] (50) NOT NULL ,
    [Password] [varchar] (50) NOT NULL ,
    [Address] [varchar] (100) NULL ,
    [Homepage] [varchar] (50) NULL ,
    [Email] [varchar] (50) NULL 
      

  6.   


    改成
    "Insert into [User] (Email,Address,UserName,HomePage,LoginName,PassWord) Values(1,1,1,1,‘zl4460072’,1)"
      

  7.   

    消息 128,级别 15,状态 1,第 1 行
    在此上下文中不允许使用名称 "cdee2"。有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。
    应该是数据库中 LoginName类型 不是varchar、char、nvarchar之类的吧
      

  8.   

    在这个方法里的饿
       public bool Insert(String TableName, Hashtable Cols)
            {
                int Count = 0;            if (Cols.Count <= 0)
                {
                    return true;
                }            String Fields = " (";
                String Values = " Values(";
                foreach (DictionaryEntry item in Cols)
                {
                    if (Count != 0)
                    {
                        Fields += ",";
                        Values += ",";
                    }
                    Fields += item.Key.ToString();
                    Values += item.Value.ToString();
                    Count++;
                }
                Fields += ")";
                Values += ")";            String SqlString = "Insert into " + TableName + Fields + Values;            return Convert.ToBoolean(ExecuteSQL(SqlString));
            }
    怎么加上单引号阿
      

  9.   

    检查下您数据库设计的时候 用户名的字段您用的是什么数据类型。
    还有SQLSTRING 中的VALUES里面有个明显的错误 Values(1,1,1,1,'zl4460072',1)'zl4460072'是字符串  所以您必须用单引号加以转换
      

  10.   

    在这里怎么给Values加单引号饿
    在这个方法里的饿 
      public bool Insert(String TableName, Hashtable Cols) 
            { 
                int Count = 0;             if (Cols.Count <= 0) 
                { 
                    return true; 
                }             String Fields = " ("; 
                String Values = " Values("; 
                foreach (DictionaryEntry item in Cols) 
                { 
                    if (Count != 0) 
                    { 
                        Fields += ","; 
                        Values += ","; 
                    } 
                    Fields += item.Key.ToString(); 
                    Values += item.Value.ToString(); 
                    Count++; 
                } 
                Fields += ")"; 
                Values += ")";             String SqlString = "Insert into " + TableName + Fields + Values;             return Convert.ToBoolean(ExecuteSQL(SqlString)); 
            } 
    怎么加上单引号阿
      

  11.   

    数据库是Varchar型时,相应的value,一定要加单引号,而数值型,一定不要加单引号
      

  12.   

     public bool Insert(String TableName, Hashtable Cols)
            {
                int Count = 0;            if (Cols.Count <= 0)
                {
                    return true;
                }            String Fields = " (";
                String Values = " Values('";
                foreach (DictionaryEntry item in Cols)
                {
                    if (Count != 0)
                    {
                        Fields += ",";
                        Values += "',";
                    }
                    Fields += item.Key.ToString();
                    Values += item.Value.ToString();
                    Count++;
                }
                Fields += ")";
                Values += ")";            String SqlString = "Insert into " + TableName + Fields + Values;            return Convert.ToBoolean(ExecuteSQL(SqlString));
            }试试
      

  13.   

    怎么不用参数呢?这样写会引起SQL注入的
      

  14.   

    Fields += "'"+ item.Key.ToString()+"'"; 
                    Values +="'"+ item.Value.ToString()+"'"; 
    这两个改了应该就可以了
      

  15.   

    错了
    只要Values +="'"+ item.Value.ToString()+"'"; 
    上面一句就不要了
      

  16.   

    sql注入是什么概念 能解释下吗?
      

  17.   


    在SQLSTRING里直接加就行了 
    如果是变量 请参考下面int i=0;
    string x="1234";value("+i+",'"+x+"');  请注意看 数据类型不同,加单引号的技巧也不同。
      

  18.   

    看一下C#数据类型
    int i =1;
    string str ="123";
      

  19.   

    为什么数值型的不要加单引号?
    因为在Sql中,加单引号的,表示是字符串
    不加单引号的,以数字开头表示是数字,以其它字符开头表示是字段、表名、关键字……
    如果是Oracle,那么允许你通通加上单引号,完全没有问题;
    但是SqlServer或Access
    不允许数值型加上单引号
      

  20.   

    LS的
    谁说SQL里数值不可以加单引号的
    你试过不可以吗
    SQL2000以后会自动转换的好不好
      

  21.   

    按照修改的  
    public bool Insert(String TableName, Hashtable Cols) 
            { 
                int Count = 0;             if (Cols.Count <= 0) 
                { 
                    return true; 
                }             String Fields = " ("; 
                String Values = " Values('"; 
                foreach (DictionaryEntry item in Cols) 
                { 
                    if (Count != 0) 
                    { 
                        Fields += ","; 
                        Values += "',"; 
                    } 
                    Fields += item.Key.ToString(); 
                    Values += item.Value.ToString(); 
                    Count++; 
                } 
                Fields += ")"; 
                Values += "')";             String SqlString = "Insert into " + TableName + Fields + Values;             return Convert.ToBoolean(ExecuteSQL(SqlString)); 
            } 
    就可以了
      

  22.   

    检查sql语句。应该是引号的问题!
      

  23.   

    Sql2000可以?可能我记错了,很久没用SqlServer了
    不过可以肯定的是Access不行,而Oracle可以但是我在Oracle里,也尽量不用单引号的