[SQL] 테이블 변수 @table를 선언해야합니다
SQL테이블 변수 @table를 선언해야합니다
나는 C # 및 SQL에 초보자 해요, 제가 수행하도록이 SQL 삽입 문이있다. 내가 삽입 할 다른 변수들 사이의 테이블 이름을 요청합니다.
내가이 콘솔 응용 프로그램을 실행할 때 나는이 오류가 발생합니다 :
이 코드의 일부입니다 :
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 added : {0}", count.ToString());
Console.WriteLine("Press Enter to exit.");
}
Console.ReadLine();
}
catch (SqlException ex)
{
Console.WriteLine(ex.Message);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
해결법
-
==============================
1.당신은이 작업을 수행 할 수 없습니다. 당신은 매개 변수로 당신이 한 길을 테이블 이름을 전달할 수 없습니다 :
당신은이 작업을 수행 할 수 없습니다. 당신은 매개 변수로 당신이 한 길을 테이블 이름을 전달할 수 없습니다 :
SqlCommand com = new SqlCommand("insert into @table ..."); ... com.Parameters.AddWithValue("@table", tblname);
대신이 작업을 수행 할 수 있습니다
Console.WriteLine("Enter table name:"); Console.Write(">> "); string tblname = Console.ReadLine(); string sql = String.Format("insert into {0} (time, date, pin) values ... ", tblname); SqlCommand com = new SqlCommand(sql, con); ...
-
==============================
2.테이블 이름은 SQL 쿼리에 입력 매개 변수가 될 수 없습니다. 그러나, 당신은 항상 "다음과 같이하는 SqlCommand에 전달하기 전에 SQL 문자열을 준비 할 수 있습니다 :
테이블 이름은 SQL 쿼리에 입력 매개 변수가 될 수 없습니다. 그러나, 당신은 항상 "다음과 같이하는 SqlCommand에 전달하기 전에 SQL 문자열을 준비 할 수 있습니다 :
var sqlString = string.Format("insert into {0} (time, date, pin) values (@time, @date, @pin)", tblname)
그리고
SqlCommand com = new SqlCommand(sqlString); ...
-
==============================
3.이 시도...
이 시도...
string tblname = "; DROP TABLE users;"; var sqlString = string.Format("insert into {0} (time, date, pin) values (@time, @date, @pin)", tblname)
https://en.wikipedia.org/wiki/SQL_injection
from https://stackoverflow.com/questions/14003241/must-declare-the-table-variable-table by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 2000 SQL 서버에 SQL 서버 ROW_NUMBER ()? (0) | 2020.06.13 |
---|---|
[SQL] 내가 어떻게 MySQL의 데이터베이스에 직렬화 필드에서 검색 할 수 있습니까? (0) | 2020.06.13 |
[SQL] SQL은 VARCHAR에서 단지 숫자 값을 (0) | 2020.06.13 |
[SQL] SQL Server는 24 시간에 의해 지속 시간 행을 분할 (0) | 2020.06.13 |
[SQL] 이 텍스트 필드에서 작동하지 왜 GROUP_CONCAT 또는 다른 이유에 길이 제한이 (0) | 2020.06.13 |