【问题标题】:ASP. NET - SqlDataSource update data baseASP。 NET - SqlDataSource 更新数据库
【发布时间】:2016-01-13 21:51:11
【问题描述】:

我正在学习 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>

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

【问题讨论】:

  • 您在更新语句中缺少@ 参数符号,这是一个msdn 参考,可以查看SqlDataSource.UpdateParameters Property 如果您需要更多示例,请使用谷歌
  • 如果我把 @ 然后我得到错误:“必须声明标量变量:@Marca”...
  • 要么切换到ControlParameters,要么在后面的代码中设置。
  • 你为什么不创建一个方法来更新数据库,在我个人使用 UpdateParameters 的代码中使用不同的方法在我看来已经过时了
  • 经过一些尝试,我发现上面的代码有什么问题。首先,由于 Marca 是 PK 不应该在 WHERE 子句之前使用它的更新命令。我也删除了 UpdateParameters 部分。我为每个要设置的值添加了@。这意味着一对 Field=Value 现在是 Field=@Value

标签: c# asp.net sqldatasource


【解决方案1】:

使用后面的代码来填充gridView,它更容易并且为您提供对gridView绑定的更多处理和自定义

here 你会找到一些将gridView 与sql 数据源连接起来的最简单方法的指南。

【讨论】:

    【解决方案2】:

    如果你想通过创建一个返回 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];
        }
    }
    

    【讨论】:

      【解决方案3】:

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

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

      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" />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-10
        • 1970-01-01
        相关资源
        最近更新 更多