2017-02-08 174 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,因为这是你在你的存储过程中期待什么。根据需要做这些更改。希望这可以帮助。