2015-06-17 6 views
-1

Мой запрос, похоже, не отвечает в моем коде, однако в области сценариев SQL мой скрипт выполняется чисто. Проблема в том, что я просто вставляю эту переменную из остальной части запроса, например, добавляя скобки в конец, но не читаю. Я делаю это в .NET Gridview. Любые идеи были бы хорошы. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.Простой синтаксис SQL Issue

SQL (без проблем):

SELECT [TeamID], [TeamName], [SportsType], [ContactName], [ContactPhone], [ContactEmail] FROM [Teams] WHERE CompanyID = (SELECT CompanyID FROM Company WHERE companyadminUserName = 'rec1') OR CompanyID = (SELECT CompanyID FROM Employee WHERE EmployeeBarcodeNumber = 'rec1') 

В кодексе (вопросы):

public String loggedInUser = "rec1"; 

SqlDataSource1.SelectCommand = "SELECT [TeamID], [TeamName], [SportsType], [ContactName], [ContactPhone], [ContactEmail] FROM [Teams] WHERE CompanyID = (SELECT CompanyID FROM Company WHERE companyadminUserName ="+loggedInUser+") OR CompanyID = (SELECT CompanyID FROM Employee WHERE EmployeeBarcodeNumber ="+loggedInUser+"')'"; 
+2

не использовать строки CONCAT - использовать параметризованный запрос –

+0

Вы упускаете одиночные кавычки loggedInUser –

ответ

1

Вы, кажется, не хватает какой-то "'" при создании запроса в коде.

Попробуйте это:

public String loggedInUser = "rec1"; 

SqlDataSource1.SelectCommand = "SELECT [TeamID], [TeamName], [SportsType], [ContactName], [ContactPhone], [ContactEmail] FROM [Teams] WHERE CompanyID = (SELECT CompanyID FROM Company WHERE companyadminUserName = '"+loggedInUser+"') OR CompanyID = (SELECT CompanyID FROM Employee WHERE EmployeeBarcodeNumber = '"+loggedInUser+"')"; 
+0

совершенен! Я соглашусь, как только смогу. – user4619468

0

ваша команда SQL строка что-то неправильно

SqlDataSource1.SelectCommand = "SELECT [TeamID], [TeamName], [SportsType], [ContactName], [ContactPhone], [ContactEmail] FROM [Teams] WHERE CompanyID = (SELECT CompanyID FROM Company WHERE companyadminUserName = '"+loggedInUser+"') OR CompanyID = (SELECT CompanyID FROM Employee WHERE EmployeeBarcodeNumber = '"+loggedInUser+"')"; 

и должны добавить '' в loggedInUser

4

Это потенциально очень плохая дыра в безопасности для конкатенации таких запросов. Если вы пишете производственный код, используйте SqlParameters для предотвращения атаки на SQL-инъекцию. Использование SqlParameters также означает, что у вас меньше шансов на попадание ошибок, связанных с котировками (например, у вас есть).

How does SQLParameter prevent SQL Injection?

SqlCommand sqlCmd = 
@"SELECT 
    [TeamID], 
    [TeamName], 
    [SportsType], 
    [ContactName], 
    [ContactPhone], 
    [ContactEmail] 
FROM [Teams] 
WHERE CompanyID = (
    SELECT CompanyID 
    FROM Company 
    WHERE companyadminUserName = @loggedInUser 
) 
OR CompanyID = (
    SELECT CompanyID 
    FROM Employee 
    WHERE EmployeeBarcodeNumber = @loggedInUser 
)"; 

sqlCmd.Parameters.Add(new SqlParameter("@loggedInUser", SqlDbType.NVarChar) { Value = loggedInUser }); 
Смежные вопросы