2012-12-14 55 views
1

当我尝试执行此代码时,收到以下错误消息。但我将它添加到我的命令中。有人能指出被忽略的一步吗?谢谢。dataadapter填写缺少参数

过程或函数'usps_getContactDetails'需要参数'@aspContactID',它没有提供。

SqlConnection conn = new SqlConnection(GetConnString()); SqlCommand cmd = new SqlCommand(“usps_getContactDetails”,conn);

 SqlParameter parmContactID = new SqlParameter("@aspContactID", Convert.DBNull); 
     cmd.Parameters.Add(parmContactID); 
     parmContactID.Direction = ParameterDirection.Input; 

     SqlDataAdapter da = new SqlDataAdapter(); 
     da.SelectCommand = cmd; 

     conn.Open(); 
     DataSet cusDS = new DataSet(); 
     da.Fill(cusDS, "Contacts"); 

回答

0

当执行SqlCommand和调用存储过程,你需要含蓄设置你的SqlCommand是一个StoredProcedure

using(SqlConnection con = new SqlConnection("")) 
{ 
    //Set up your command 
    SqlCommand cmd = new SqlCommand("[Procedure]", con); 
    cmd.CommandType = CommandType.StoredProcedure; 
    //Add your parameters 
    cmd.Parameters.AddWithValue("@aspContactID", ""); 
    //Declare your data adapter 
    SqlDataAdapter sda = new SqlDataAdapter(cmd); 
    DataSet ds = new DataSet(); 
    sda.Fill(ds, "Contacts"); 
} 

按照上面的格式,你应该没问题。由于以下两个原因之一,您的程序无法正常工作,因此您错过了代码行,该代码行使您的代码在此情况下工作为cmd.CommandType = CommandType.StoredProcedure;,或者因为您的参数为DBNull该过程表示它没有任何该参数的识别。如果您有可以在存储过程null或空参数,然后进行以下操作:

Create Procedure [dbo].[Example] 

@Test as Varchar(100) = '' 

As 
0
protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    private void OpenCon() 
    { 
     con = new SqlConnection(ConfigurationManager.ConnectionStrings["DbPrepConnectionString"].ConnectionString.ToString()); 
     try 
     { 
      con.Open(); 
     } 
     catch (Exception ex) 
     { 
      Response.Write(ex.Message); 
     } 
    } 



    private void SubmitData() 
    { 
     OpenCon(); 
     string sp = "sp_InsertRecord"; 
     cmd = new SqlCommand(sp, con); 

     cmd.CommandType = CommandType.StoredProcedure; 
     //add parameters... 
     cmd.Parameters.Add(new SqlParameter("@Name", SqlDbType.VarChar, 50)); 
     cmd.Parameters.Add(new SqlParameter("@UserId", SqlDbType.Int)); 
     cmd.Parameters.Add (new SqlParameter ("@ProductName",SqlDbType .VarChar,50)); 
     cmd.Parameters.Add(new SqlParameter("@Price", SqlDbType.Money)); 

     //set paarameters.... 
     cmd.Parameters["@Name"].Value = txtName.Text.ToString(); 
     cmd.Parameters["@UserId"].Value = txtUserId.Text.ToString(); 
     cmd.Parameters["@ProductName"].Value = txtProductName.Text.ToString(); 
     cmd.Parameters["@Price"].Value = txtPrice.Text.ToString(); 
     cmd.ExecuteNonQuery(); 
     lblMessage.Text = "data inserted successfully"; 
    } 

    protected void btnSubmit_Click(object sender, EventArgs e) 
    { 
     SubmitData(); 
    } 

    private void FindData() 
    { 
     OpenCon(); 
     string s = "sp_FindRecord"; 
     cmd = new SqlCommand(s, con); 
     cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int)); 
     cmd.Parameters["@Id"].Value = txtName.Text.ToString(); 
     cmd.CommandType = CommandType.StoredProcedure; 
     ad = new SqlDataAdapter(cmd); 
     ds = new DataSet(); 
     ad.Fill(ds); 
     dt = ds.Tables[0]; 
     currow = 0; 

     FillControls(); 

    } 

    private void FillControls() 
    { 
     txtOrderId.Text = dt.Rows[currow].ItemArray[0].ToString(); 
     txtUserId.Text = dt.Rows[currow].ItemArray[1].ToString(); 
     txtProductName.Text = dt.Rows[currow].ItemArray[2].ToString(); 
     txtPrice.Text = dt.Rows[currow].ItemArray[3].ToString(); 
    } 

    protected void btnFind_Click(object sender, EventArgs e) 
    { 
     FindData(); 
    } 

} 

}”