ASP。 NET - SqlDataSource更新数据库

时间:2016-01-13 21:51:11

标签: c# asp.net sqldatasource

我正在学习ASP,我不得不使用asp SqlDataSource和GridView更新数据库。 我有以下控件:

<asp:SqlDataSource ID="SqlDataSource1" 
        runat="server" 
        ConnectionString="<%$ ConnectionStrings:BPersonalConnectionString %>" 
        OldValuesParameterFormatString="original_{0}"
        ConflictDetection="CompareAllValues"
        SelectCommand="SELECT [Marca], [Nume], [Prenume], [Salariu], [Profesia] FROM [Salariati]"
        UpdateCommand="update [Salariati] set [Marca] = Marca, [Nume] = Nume, [Prenume] = Prenume, [Salariu] = Salariu, [Profesia] = Profesia
                       where [Marca] = @original_Marca">
        <UpdateParameters>
            <asp:Parameter Name="Marca" Type="Int16"/>
            <asp:Parameter Name="Nume" Type="String" Size="20"/>
            <asp:Parameter Name="Prenume" Type="String" Size="20" />
            <asp:Parameter Name="Salariu" Type="Int32" />
            <asp:Parameter Name="Profesia" Type="String" Size="10" />
            <asp:Parameter Name="original_Marca" Type="Int16" />
        </UpdateParameters>
    </asp:SqlDataSource>

    <asp:GridView ID="GridView" 
        runat="server" 
        DataSourceID="SqlDataSource1" 
        AutoGenerateColumns="true" 
        AutoGenerateEditButton="true"
        DataKeyNames="Marca"
        AllowPaging="true"
        PageSize="3"></asp:GridView>

每当我尝试编辑和更新项目时,我都不会得到任何结果。网格显示与更新前完全相同的值。我没有在代码隐藏文件中写任何代码。 我查看了已经就此主题做过的其他一些示例,但我无法确定更新问题的原因。 任何提示? 感谢!!!

3 个答案:

答案 0 :(得分:1)

使用代码Behind来填充gridView,它更容易,并为gridView绑定提供更多处理和自定义

here你会找到一些指南,用于连接gridView和sql数据源的最简单方法。

答案 1 :(得分:0)

您添加了参数,但值在哪里?

并查看您的查询:对于某些参数,您没有使用@,但最后使用的参数。将您的查询更改为以下内容:

UpdateCommand="update [Salariati] set [Marca] = @Marca, [Nume] = @Nume, [Prenume] = @Prenume, [Salariu] = @Salariu, [Profesia] = @Profesia
                   where [Marca] = @original_Marca">

然后你的参数:

<asp:ControlParameter ControlID="YourControlID" Name="Marca" PropertyName="Text" />
<asp:ControlParameter ControlID="YourControlID" Name="Nume" PropertyName="Text" />
<asp:ControlParameter ControlID="YourControlID" Name="Prenume" PropertyName="Text" />
<asp:ControlParameter ControlID="YourControlID" Name="Salariu" PropertyName="Text" />
<asp:ControlParameter ControlID="YourControlID" Name="Profesia" PropertyName="Text" />
<asp:ControlParameter ControlID="YourControlID" Name="original_Marca" PropertyName="Text" />

答案 2 :(得分:0)

如果你想通过创建一个返回DataSet的方法以及传递参数来执行查询来执行此操作,那么执行类似的操作我将发布返回DataTable的相同内容,但它非常直接适用于您动态传递的任何查询

public static DataSet ExecuteDataSet(string sql, CommandType cmdType, params SqlParameter[] parameters)
{
    using (DataSet ds = new DataSet())
    using (SqlConnection connStr = new SqlConnection(ConfigurationManager.ConnectionStrings["DbConn"].ConnectionString))
    using (SqlCommand cmd = new SqlCommand(sql, connStr))
    {
        cmd.CommandType = cmdType;
        foreach (var item in parameters)
        {
            cmd.Parameters.Add(item);
        }

        try
        {
            cmd.Connection.Open();
            new SqlDataAdapter(cmd).Fill(ds);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        return ds;
    }
}
  

如果你想返回一个DataTable

public static DataTable ExecuteDataSet(string sql, CommandType cmdType, params SqlParameter[] parameters)
{
    using (DataSet ds = new DataSet())
    using (SqlConnection connStr = new SqlConnection(ConfigurationManager.ConnectionStrings["DbConn"].ConnectionString))
    using (SqlCommand cmd = new SqlCommand(sql, connStr))
    {
        cmd.CommandType = cmdType;
        foreach (var item in parameters)
        {
            cmd.Parameters.Add(item);
        }

        try
        {
            cmd.Connection.Open();
            new SqlDataAdapter(cmd).Fill(ds);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        return ds.Tables[0];
    }
}