2014-01-30 90 views
0

我有一個很大的SQL語句,我想在c#中運行,但是,我看到的所有示例都是針對一行長的SQL語句。c#執行大型SQL語句

這是我的C#代碼到目前爲止。在我的代碼後,我已經包含了查詢,我想運行。


C#查詢代碼

private void button4_Click(object sender, EventArgs e) 
     { 
      System.Data.Odbc.OdbcConnection conn = new System.Data.Odbc.OdbcConnection(); 
      conn.ConnectionString = "Driver={Oracle in OraClient11g_home1};" + 
            "Dbq=" + "database" + 
            ";Uid=" + "admin" + ";Pwd=" + "admin" + ";"; 
      try 
      { 
       conn.Open(); 
       OdbcCommand com = new OdbcCommand("select count(*) from user_tables;", conn); 
       com.CommandType = CommandType.Text; 
       OdbcDataReader rdr = com.ExecuteReader(); 
       while (rdr.Read()) 
       { 
        var mystring = rdr.GetString(0); 
        MessageBox.Show(mystring); 
       }     
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
      conn.Close(); 
     } 


查詢運行

SELECT user_id, 
     user_name, 
     user_name_full, 
     (SELECT user_name 
      FROM MD_SITE_USER 
      WHERE user_id = u.GROUP_ID) 
      assigned_user_group, 
     user_or_group, 
     CASE 
      WHEN (SELECT o.grant_or_revoke 
        FROM MD_SITE_APP_ACTION a, MD_SITE_APP_ACTION_OWNER o 
        WHERE  a.action_id = o.action_id 
         AND a.action_name = 'Admin.start' 
         AND o.user_id = u.GROUP_ID) = '+' 
      THEN 
       'Y' 
      ELSE 
       'N' 
     END 
      "Assigned By Group?", 
     CASE 
      WHEN (SELECT o.grant_or_revoke 
        FROM MD_SITE_APP_ACTION a, MD_SITE_APP_ACTION_OWNER o 
        WHERE  a.action_id = o.action_id 
         AND a.action_name = 'Admin.start' 
         AND o.user_id = u.user_id) = '+' 
      THEN 
       'Y' 
      ELSE 
       'N' 
     END 
      "Assigned By User?" 
    FROM MD_SITE_USER u 
    WHERE  user_name IS NOT NULL 
     AND ( CASE 
        WHEN (SELECT o.grant_or_revoke 
          FROM MD_SITE_APP_ACTION a, 
           MD_SITE_APP_ACTION_OWNER o 
          WHERE  a.action_id = o.action_id 
           AND a.action_name = 'Admin.start' 
           AND o.user_id = u.GROUP_ID) = '+' 
        THEN 
         'Y' 
        ELSE 
         'N' 
       END = 'Y' 
       OR CASE 
        WHEN (SELECT o.grant_or_revoke 
          FROM MD_SITE_APP_ACTION a, 
           MD_SITE_APP_ACTION_OWNER o 
          WHERE  a.action_id = o.action_id 
           AND a.action_name = 'Admin.start' 
           AND o.user_id = u.user_id) = '+' 
        THEN 
         'Y' 
        ELSE 
         'N' 
       END = 'Y') 
ORDER BY user_or_group, user_name; 
+0

什麼問題? – Dan

+0

讓它成爲一條線,或者使用StringBuilder – Guilherme

+0

你在問如何運行這麼長的代碼嗎?您可以在程序中創建該程序並執行該程序。 – Question3CPO

回答

5

做到這一點...或者使用StringBuilder類...

​​
4

您可以使用​​使用@標誌:

string longstring = @"SELECT 
     * 
    FROM MyTable 
    "; 

注意,在你的情況下,你在你的查詢有"。爲了逃避這些,請用""替換它們。

string myQuery = @"SELECT user_id, 
    user_name, 
    user_name_full, 
    (SELECT user_name 
     FROM MD_SITE_USER 
     WHERE user_id = u.GROUP_ID) 
     assigned_user_group, 
    user_or_group, 
    CASE 
     WHEN (SELECT o.grant_or_revoke 
       FROM MD_SITE_APP_ACTION a, MD_SITE_APP_ACTION_OWNER o 
       WHERE  a.action_id = o.action_id 
        AND a.action_name = 'Admin.start' 
        AND o.user_id = u.GROUP_ID) = '+' 
     THEN 
      'Y' 
     ELSE 
      'N' 
    END 
     ""Assigned By Group?"", 
    CASE 
     WHEN (SELECT o.grant_or_revoke 
       FROM MD_SITE_APP_ACTION a, MD_SITE_APP_ACTION_OWNER o 
       WHERE  a.action_id = o.action_id 
        AND a.action_name = 'Admin.start' 
        AND o.user_id = u.user_id) = '+' 
     THEN 
      'Y' 
     ELSE 
      'N' 
    END 
     ""Assigned By User?"" 
FROM MD_SITE_USER u 
WHERE  user_name IS NOT NULL 
    AND ( CASE 
       WHEN (SELECT o.grant_or_revoke 
         FROM MD_SITE_APP_ACTION a, 
          MD_SITE_APP_ACTION_OWNER o 
         WHERE  a.action_id = o.action_id 
          AND a.action_name = 'Admin.start' 
          AND o.user_id = u.GROUP_ID) = '+' 
       THEN 
        'Y' 
       ELSE 
        'N' 
      END = 'Y' 
      OR CASE 
       WHEN (SELECT o.grant_or_revoke 
         FROM MD_SITE_APP_ACTION a, 
          MD_SITE_APP_ACTION_OWNER o 
         WHERE  a.action_id = o.action_id 
          AND a.action_name = 'Admin.start' 
          AND o.user_id = u.user_id) = '+' 
       THEN 
        'Y' 
       ELSE 
        'N' 
      END = 'Y') 
ORDER BY user_or_group, user_name; 
"; 
+0

任何理由,像這樣的東西不會工作? – user3254596

+0

我試着從文件中讀取SQL,但是出錯了,(語法)。我知道我錯過了一些簡單的事情。我確實將它剪切並粘貼到我的代碼中,並且它能夠以這種方式工作,但我希望能夠從文件中讀取SQL。存儲程序是不允許的。 – user3254596

+0

如果你從一個文件中讀取它,你不需要轉義引號(如果你這樣做的話) –