我已经搜索了几天,我发现在 C# 代码中建立的 sql 连接有很多可能性,但是我找不到像我这样使用 web.config 和 .aspx 页面建立连接的任何东西。
问题:我的 SQLdatasource1 带有使用存储过程的插入。SP 检查重复的 ID (MRN),如果找到则返回 0,如果没有则返回 1。只要没有重复,它也会执行插入。这一切都很好。
但是,我想获取 ReturnValue,检查 0 或 1 并根据结果向用户发送消息。这就是我正在使用的。为了简单起见,它被缩写。该表单是一个带有 InsertItemTemplate 的 asp:formview,所有控件都包含在其中。
<asp:sqldatasource ID="sqldatasource1" runat="server"
ConnectionString="<%$ ConnectionStrings:... %>"
ProviderName="..."
...
<InsertParameters>
<asp:Parameter Name="return_value" DefaultValue="0" Type="Empty" Size="0" ConvertEmptyStringToNull="False" Direction="ReturnValue" />
</InsertParameters>
在代码隐藏中,我只想抓取参数 return_value 的值并响应它。我下面是我想做的,但这显然是错误的。我只是想按照我的设想发布它,这样你就会知道我的意图。我尝试使用按钮的单击,这不仅给了我当前上下文中不存在 return_value 的相同错误,而且它也不会发布消息框。在这一点上,我已经尝试了很多不同的东西,我迷路了。
更新:这是我目前在代码隐藏中的内容。MessageBox 在弹出时只显示“@return_value”。
protected void Sqldatasource1_Inserted(object sender, SqlDataSourceStatusEventArgs e)
{
SqlParameter return_value = new SqlParameter("@return_value", SqlDbType.Int);
return_value.Direction = ParameterDirection.ReturnValue;
return_value.Value = (object)return_value ?? DBNull.Value;
MessageBox.Show(return_value.Value.ToString());
if (Convert.ToInt32(return_value.Value) != 1)
{
MessageBox.Show(return_value.Value.ToString());
}
else
{
MessageBox.Show(return_value.Value.ToString());
}
}
提前致谢。对不起,如果这是可笑的简陋,但我是盲目的。
更新 2(2013 年 5 月 7 日):经过额外的搜索和阅读,我尝试了其他一些没有用的东西。没有错误,只是不起作用。我在我的 Inserted.xml 中尝试了以下两个位。
int? return_value = e.Command.Parameters["@return_value"].Value as int?;
MessageBox.Show(return_value.ToString());
和
int return_value = (Convert.ToInt32(e.Command.Parameters["@return_value"]));
MessageBox.Show(return_value.ToString());