2013-02-10 5 views
0
SqlCommand cmd = new SqlCommand(); 
cmd.Connection = con; 
cmd.CommandType = CommandType.Text; 
cmd = CreateParameterizedQuery(); 
SqlDataAdapter dap = new SqlDataAdapter(); 
dap.SelectCommand = cmd; 
DataTable tbl = new DataTable(); 
dap.Fill(tbl); 
if (tbl.Rows.Count > 0) 
{ 
    grid.DataSource = tbl; 
} 

실제 SQL 쿼리는 SQL Management Studio에서 결과를 생성합니다. 그러나 나는 0 Rows of Data를 얻고있다. tbl.Rows.Count에 중단 점을 설정하고 0이라고 판단하고 스테핑은 DataSource를 설정하는 데 필요한 코드를 건너 뜁니다.SqlDataAdapter에서 결과가 0입니다.

디버깅
SELECT distinct [databaseName].[dbo].[customerTable].[name], [databaseName].[dbo].[customerTable].[dos], [databaseName].[dbo].[customerTable].[ACC], [databaseName].[dbo].[reportTable].[customerID], [databaseName].[dbo].[reportTable].[ACC], [databaseName].[dbo].[reportTable].[fullreport] FROM [databaseName].[dbo].[reportTable], [databaseName].[dbo].[customerTable] WHERE [databaseName].[dbo].[reportTable].[fullreport] LIKE @word0 AND [databaseName].[dbo].[customerTable].[ACC] = [databaseName].[dbo].[reportTable].[ACC] 

debugMySQL과 함께 SQL 쿼리를 뱉어하는 방법입니다 때

private SqlCommand CreateParameterizedQuery() 
    { 
     SqlCommand command = new SqlCommand(); 
     string[] allTheseWords; 
     if (textBoxAllTheseWords.Text.Length > 0) 
     { 
      allTheseWords = textBoxAllTheseWords.Text.Split(' '); 
      string SQLQuery = "SELECT distinct [databaseName].[dbo].[customerTable].[name], [databaseName].[dbo].[customerTable].[dos], [databaseName].[dbo].[customerTable].[ACC], [databaseName].[dbo].[reportTable].[id], [databaseName].[dbo].[reportTable].[ACC], [databaseName].[dbo].[reportTable].[fullreport] FROM [databaseName].[dbo].[reportTable], [databaseName].[dbo].[customerTable] WHERE "; 
      int i = 0; 
      foreach (string word in allTheseWords) 
      { 
       var name = "@word" + (i++).ToString(); 
       command.Parameters.AddWithValue(name, "'%" + word + "%'"); 
       SQLQuery = SQLQuery + String.Format(" [databaseName].[dbo].[reportTable].[fullreport] LIKE {0} AND ", name); 
      } 
      SQLQuery = SQLQuery + " [databaseName].[dbo].[customerTable].[ACC] = [databaseName].[dbo].[reportTable].[ACC]"; 
      command.CommandText = SQLQuery; 
     } 
     return command; 
    } 

나는 윈도우 8


에 C와 함께 #의 WinForm을 사용하고는은 SQLQuery 변수는이 데이터를 포함 치환 된 매개 변수

public void debugMySQL() 
    { 
     string query = command.CommandText; 
     foreach (SqlParameter p in command.Parameters) 
     { 
      query = query.Replace(p.ParameterName, p.Value.ToString()); 
     } 
     textBox1.Text = query; 
    } 
당신은 인수 값이 SQL Profiler을 사용으로 매개 변수화 쿼리를 볼 수 있습니다
SELECT distinct [databaseName].[dbo].[customerTable].[name], [databaseName].[dbo].[customerTable].[dos], [databaseName].[dbo].[customerTable].[ACC], [databaseName].[dbo].[reportTable].[id], [databaseName].[dbo].[reportTable].[ACC], [databaseName].[dbo].[reportTable].[fullreport] FROM [databaseName].[dbo].[reportTable], [databaseName].[dbo].[customerTable] WHERE [databaseName].[dbo].[reportTable].[fullreport] LIKE '%single%' AND [databaseName].[dbo].[customerTable].[ACC] = [databaseName].[dbo].[reportTable].[ACC] 
+1

SQL Server가 보낸 실제 쿼리를 보려면 프로파일 러를 사용하십시오. –

+1

디버거가 실행되기 전에 디버거에서 'SQLQuery'의 내용을 확인 했습니까? 귀하의 질문에 전체 SQL 문자열을 게시 할 수 있습니까? –

+0

코드에서 실수를 수정했지만 의미가 무엇입니까? 진짜로 테스트 한거야? –

답변

2

처럼

출력은 보인다.

enter image description here

+0

실행하면 @ word0라고 표시됩니다. –