我是C#和SQL的初学者,我有这个我要执行的SQL插入语句.它要求我要插入的其他变量中的表名.
但是,当我运行此控制台应用程序时,我收到此错误:
必须声明表变量@table
这是代码的一部分:
StreamReader my_reader = getFile(args);
string CS = formCS();
try
{
using (SqlConnection con = new SqlConnection(CS))
{
SqlCommand com = new SqlCommand("insert into @table (time, date, pin) values (@time, @date, @pin)", con);
con.Open();
Console.WriteLine("Enter table name:");
Console.Write(">> ");
string tblname = Console.ReadLine();
com.Parameters.AddWithValue("@table", tblname);
string line = "";
int count = 0;
while ((line = my_reader.ReadLine()) != null)
{
Dictionary<string, string> result = extractData(line);
com.Parameters.AddWithValue("@time", result["regTime"]);
com.Parameters.AddWithValue("@date", result["regDate"]);
com.Parameters.AddWithValue("@pin", result["regPin"]);
count += com.ExecuteNonQuery();
com.Parameters.Clear();
}
Console.WriteLine("Recoreds …Run Code Online (Sandbox Code Playgroud) 我非常喜欢使用命名参数而不是基于字符串的参数注入.它对大多数形式的SQL注入都是类型安全且安全的.在旧的ADO.NET中,我会为我的查询创建一个SqlCommand对象和一堆SqlParameters.
var sSQL = "select * from Users where Name = @Name";
var cmd = new SqlCommand(conn, sSQL);
cmd.Parameters.AddWithValue("@Name", "Bob");
cmd.ExecuteReader();
Run Code Online (Sandbox Code Playgroud)
现在,在Entity Framework中,它(在此链接上)显示为已经回归到一个简单的String.Format语句和字符串注入:(简化讨论)
MyRepository.Users.SqlQuery("Select * from Users where Name = {0}", "Bob");
Run Code Online (Sandbox Code Playgroud)
有没有办法在Entity Framework DbSqlQuery类中使用命名参数?
我有这样的查询:
"SELECT * FROM MyTable_" + myID + " WHERE variable = @variable";
Run Code Online (Sandbox Code Playgroud)
SQL参数化适用于变量,但如何让它与表名一起使用?myID是我传入并更改的int(可以转换为字符串),但是如何防止sql注入?