静态方法
[DataObjectMethod(DataObjectMethodType.Update)]
public static void updateCustomer(int CustomerID, string firstname, string lastname, string email, int AccountNum)
{
SqlConnection connection = new SqlConnection(getConnectionString());
connection.Open();
SqlCommand command = new SqlCommand("sp_updateCustomer", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@Cust_Id", CustomerID);
command.Parameters.AddWithValue("@Cust_Fname", firstname);
command.Parameters.AddWithValue("@Cust_Lname", lastname);
command.Parameters.AddWithValue("@Cust_Email", email);
command.Parameters.AddWithValue("@Bank_Account_num", AccountNum);
command.ExecuteNonQuery();
connection.Close();
}
GridView的
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" OldValuesParameterFormatString="original_{0}" SelectMethod="viewAllCustomer" TypeName="BusinessLogic" UpdateMethod="updateCustomer" >
<UpdateParameters>
<asp:Parameter Name="CustomerID" Type="Int32" />
<asp:Parameter Name="firstname" Type="String" />
<asp:Parameter Name="lastname" Type="String" />
<asp:Parameter Name="email" Type="String" />
<asp:Parameter Name="AccountNum" Type="Int32" />
</UpdateParameters>
答案 0 :(得分:1)
使用VS-2012 Express for WEB,我也遇到了困难,发现参数名称必须匹配四个位置 - 类型数据集设计器(xsd),BLL级更新函数,aspx -designer to&#39;配置数据源&#39;和aspx源文件。
首先,通过选择&#34;将异常详细信息复制到剪贴板&#34;弹出错误时保存错误消息的副本。所以你可以在NOTEPAD中引用它。请将这些参数视为错误: 请注意,当被两个*。
包围时, EMAIL 参数应为BOLD Message=ObjectDataSource 'ODS_LOGIN_DETAILS' could not find a non-generic method
'UpdateFromDetailsView' that has parameters:
original_UID_LOGIN, original_UID_CONTACT, UID_USER_TYPE, TXT_USERNAME,
TXT_PASSWORD, BOOL_IS_ACTIVE, DT_END, cFirstName, cLastName,
cCONTACTTITLE, original_cTXT_PHONE, **cCONTACT_EMAIL**.
然后,将错误消息中的参数列表与代码中的这些位置进行比较:
数据源参数的aspx页面(例如......)
<UpdateParameters>
<asp:Parameter Name="original_UID_LOGIN" Type="Int32" />
<asp:Parameter Name="original_UID_CONTACT" Type="Int32" />
<asp:Parameter Name="UID_USER_TYPE" Type="Int32" />
<asp:Parameter Name="TXT_USERNAME" Type="String" />
<asp:Parameter Name="TXT_PASSWORD" Type="String" />
<asp:Parameter Name="BOOL_IS_ACTIVE" Type="Boolean" />
<asp:Parameter Name="DT_END" Type="DateTime" />
<asp:Parameter Name="cFirstName" Type="String" />
<asp:Parameter Name="cLastName" Type="String" />
<asp:Parameter Name="cCONTACTTITLE" Type="String" />
<asp:Parameter Name="original_cTXT_PHONE" Type="String" />
<asp:Parameter Name="**cCONTACT_EMAIL**" Type="String" />
现在比较ObjectDataSource UPDATE方法的参数列表:
Public Function UpdateFromDetailsView(
ByVal original_UID_LOGIN As Int32,
ByVal original_UID_CONTACT As Int32,
ByVal UID_USER_TYPE As Int32,
ByVal TXT_USERNAME As String,
ByVal TXT_PASSWORD As String,
ByVal BOOL_IS_ACTIVE As Boolean,
ByVal DT_END As Date,
ByVal cFirstName As String,
ByVal cLastName As String,
ByVal cCONTACTTITLE As String,
ByVal original_cTXT_PHONE As String,
ByVal **CONTACT_EMAIL** As String
) As Boolean
最后,将参数与强类型数据集函数进行比较:
iRet = Adapter.UpdateFromDetailsView(
original_UID_LOGIN,
original_UID_CONTACT,
UID_USER_TYPE,
TXT_USERNAME,
TXT_PASSWORD,
BOOL_IS_ACTIVE,
DT_END,
cFirstName,
cLastName,
cCONTACTTITLE,
original_cTXT_PHONE,
**CONTACT_EMAIL**)
您应该注意到EMAIL参数存在许多差异,并且所有这些引用都需要具有相同的参数名称。
当你&#34; Rebuild Solution&#34;时,类型数据集将被更新,BLL-class将被更新,但不会更新aspx中的ObjectDataSource。你需要&#34;配置数据源&#34;重建解决方案后,在aspx-designer页面上。
在这个例子中,BLL-class需要包含一个&#39; cCONTACT_EMAIL&#39;作为参数并传递给适配器函数。
我希望这有帮助......谢谢......约翰
答案 1 :(得分:0)
从ObjectDataSource,我会说是的,你使用的是TypeName错误。在MSDN文章中,它引用承载方法的类,而不是方法的返回类型。
尝试将TypeName =“System.Data.DataTable”更改为TypeName =“BusinessLogic”
请参阅http://csharpdotnetfreak.blogspot.com/2009/06/gridview-objectdatasource-insert-update.html