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

怎么判断数据库查询的输入为非法?
C# code

string SqlStr = "SELECT *    FROM BusStation WHERE st LIKE '%'+@st+'%'";
                SqlCommand cmd = new SqlCommand(SqlStr, conn);
                cmd.Parameters.AddWithValue("@st", st1);        
                SqlDataReader reader1 = cmd.ExecuteReader();
                string[] temp = new string[reader1.FieldCount];
                try
                {
                    //if ((reader1[0].ToString=null)  这里怎么判断用户输入的信息不对啊  我这么写会报错啊 ?
                    //    temp[0] = "没有!";
                    while (reader1.Read())                                                         {
                        for (int i = 0; i < reader1.FieldCount; i++)
                        {
                            temp[i] = reader1[i].ToString();
                        }
                    }//while
                  
                }//try



------解决方案--------------------
if(string.IsNullOrEmpty(temp[0]))
{}
------解决方案--------------------
楼主注释掉的那个地方感觉有几个错误,首先如果reader1这个对象为空的话就不能写reader1[0],当然也不能用ToString()这个方法了,而且判断的时候应该是==null,不是=null。写成
if (reader1)
{
}
这样应该可以吧
------解决方案--------------------
你是判断从界面输入的,还是用户输入到数据库的记录??
------解决方案--------------------
判断是否有数据存在,数据为空时检验一下
------解决方案--------------------
探讨
if(string.IsNullOrEmpty(temp[0]))
{}

------解决方案--------------------
探讨
引用:
if(string.IsNullOrEmpty(temp[0]))
{}


------解决方案--------------------
你可以用验证控件啊,不合法的不让他输入,或者直接替换输入的非法字符串
C# code
//字符串清理
        public  string InputText(string inputString, int maxLength) 
        {            
            StringBuilder retVal = new StringBuilder();

            // 检查是否为空
            if ((inputString != null) && (inputString != String.Empty)) 
            {
                inputString = inputString.Trim();
                
                //检查长度
                if (inputString.Length > maxLength)
                    inputString = inputString.Substring(0, maxLength);
                
                //替换危险字符
                for (int i = 0; i < inputString.Length; i++) 
                {
                    switch (inputString[i]) 
                    {
                        case '"':
                            retVal.Append("&quot;");
                            break;
                        case '<':
                            retVal.Append("&lt;");
                            break;
                        case '>':
                            retVal.Append("&gt;");
                            break;
                        default:
                            retVal.Append(inputString[i]);
                            break;
                    }
                }                
                retVal.Replace("'", " ");// 替换单引号
            }
            return retVal.ToString();
            
        }

------解决方案--------------------
string[] temp = new string[reader1.FieldCount];这个数组不能这么定义
修改成
if (reader1.FieldCount>0)
{
string[] temp = new string[reader1.FieldCount];
}
else
{
string[] temp = new string[1];
}
------解决方案--------------------