如我原来的程序对传参是这样的String sql = @"SELECT CardName FROM MyTab WHERE CardCode = #CardCode";
oo.DbOperator.Parameters.Add(Parameter.Sql("@CardCode", ParameterDbType.VarChar, 4, CardCode));
reVal = oo.DbOperator.ExecScalar(sql).ToString();但现在我的这个MyTab表是别一个数据库的表
然后程序如下String DbServer = "OPENROWSET('SQLOLEDB', '" + info.DB_Server + "'; '" + info.DB_User + "'; '" + info.DB_Pass + "', " + info.DB_Name + ".dbo.";
String sql = @"SELECT CardName FROM " + DbServer + "MyTab WHERE CardCode = @CardCode";
oo.DbOperator.Parameters.Add(Parameter.Sql("@CardCode", ParameterDbType.VarChar, 4, CardCode));
reVal = oo.DbOperator.ExecScalar(sql).ToString();但是这样的话,如果在Dbserver被写了SQL语入的语句的话这里会被注入
那能不能改为String sql = @"SELECT CardName FROM @MyTab WHERE CardCode = @CardCode";
oo.DbOperator.Parameters.Add(Parameter.Sql("@MyTab", ParameterDbType.VarChar, 500, "OPENROWSET('SQLOLEDB', '" + info.DB_Server + "'; '" + info.DB_User + "'; '" + info.DB_Pass + "', " + info.DB_Name + ".dbo."));
oo.DbOperator.Parameters.Add(Parameter.Sql("@CardCode", ParameterDbType.VarChar, 4, CardCode));
reVal = oo.DbOperator.ExecScalar(sql).ToString();
谢谢也就是说“表名”,“远程数据库链接”
能否用参数型式来防止被注入谢谢