2017-02-08 97 views
-2
public DataTable GetRandomQuestionByCateId(string id, int z) 
{ 
    string sql = "SELECT * FROM tblQuestions where [email protected] ORDER BY QId OFFSET @z ROWS FETCH NEXT 1 ROWS ONLY"; 

    SqlParameter[] param = new SqlParameter[] 
      { 
       new SqlParameter("@a",id), 
       new SqlParameter("@z",z), 
      }; 

    return DAO.GetTable(sql, param); 
} 

我有這樣的代碼段,並希望執行一個存儲過程爲:置換SQL查詢與存儲過程

CREATE PROCEDURE GetRandomQuest 
    (@a int, 
    @b int) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT * 
    FROM tblQuestions 
    WHERE CategoryId = @a 
    ORDER BY QId 
     OFFSET @b ROWS 
     FETCH NEXT 1 ROWS ONLY; 
END 

EXEC dbo.GetRandomQuest `@a=2`, `@b=1` 

我怎麼能取代它在上述情況下?

+0

你想要取代什麼?你的問題還不夠清楚,也令人困惑 –

+0

'我'想執行storedprocedure而不是sqlquery。 –

+0

@ParasMaharjan所以你想知道在代碼中做什麼改變? –

回答

1

其實執行正在發生在DAO.GetTable()方法內部,但它沒有提供問題,沒問題,你可以修改GetRandomQuestionByCateId的簽名來執行存儲過程而不是sqlquery。這些變化將是這樣的:

public DataTable GetRandomQuestionByCateId(string id, int z) 
{ 
    DataTable resultData; 
    String sqlProcedure = "GetRandomQuest"; 
    using (SqlConnection cn = new SqlConnection("Your connection string here")) 
    { 
     using (SqlCommand cmd = new SqlCommand(sql, cn)) 
     { 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.Add("@a", SqlDbType.VarChar, 50).Value = a; 
      cmd.Parameters.Add("@z", SqlDbType.int).Value = z; 
      SqlDataAdapter da = new SqlDataAdapter(cmd); 
      da.Fill(resultData);   
     } 
    } 
    return resultData; 
} 

注意要點,通過使用cmd.CommandType = CommandType.StoredProcedure;你指定你想執行一個存儲過程,在這種情況下,在CommandText將是過程的名稱,你可以像當前所做的那樣向命令添加參數。

0

使用此代碼:

public DataTable GetRandomQuestionByCateId(string id, int z) 
{ 
    var conn = new SqlConnection(connectionString); 
    var cmd = new SqlCommand("GetRandomQuest", conn) ; 
    cmd.CommandType = CommandType.StoredProcedure 
    cmd.Parameters.Add("@a", SqlDbType.VarChar).Value = id; 
    cmd.Parameters.Add("@b", SqlDbType.VarChar).Value = z; 
    conn.Open(); 
    DataTable dt = new DataTable(); 
    dt.Load(cmd.ExecuteReader()); 
    return dt; 
} 
0
public DataTable GetRandomQuestion(int id, int z) 
    { 
     ArrayList sqlParameterArrayList = new ArrayList(); 

     SqlParameter sqpID = new SqlParameter("a", SqlDbType.Int); 
     sqpID.Value = id; 
     sqlParameterArrayList.Add(sqpID); 

     SqlParameter sqpZ = new SqlParameter("b", SqlDbType.Int); 
     sqpZ.Value = z; 
     sqlParameterArrayList.Add(sqpZ); 

     return DAO.GetTable("GetRandomQuest", sqlParameterArrayList); 
    } 

我改變了數據類型ID爲int,因爲這是你在你的存儲過程中期待什麼。根據需要做這些更改。希望這可以幫助。