相关疑难解决方法(0)

必须声明表变量@table

我是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)

c# sql console-application

10
推荐指数
2
解决办法
2万
查看次数

使用DbSet <T> .SqlQuery()时,如何使用命名参数?

我非常喜欢使用命名参数而不是基于字符串的参数注入.它对大多数形式的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类中使用命名参数?

sql entity-framework sql-injection

6
推荐指数
1
解决办法
3685
查看次数

避免使用tablename查询SQL注入

可能重复:
在.NET中的动态SQL中清理表/列名称?(防止SQL注入攻击)

我有这样的查询:

"SELECT * FROM MyTable_" + myID + " WHERE variable = @variable";
Run Code Online (Sandbox Code Playgroud)

SQL参数化适用于变量,但如何让它与表名一起使用?myID是我传入并更改的int(可以转换为字符串),但是如何防止sql注入?

.net c# sql sql-injection sqlparameter

0
推荐指数
1
解决办法
2678
查看次数