добавление параметров, не являющихся строковым типом, в объектный источник данных - PullRequest
1 голос
/ 09 июня 2019

Мне дали фрагмент кода ниже для добавления параметров вставки, которые принадлежат методу вставки моего объекта ObjectDataSource.В нижнем колонтитуле сетки находится кнопка вставки \ ссылка, которая основана на методе вставки ObjectDataSource.

В приведенном ниже методе DefaultValue является строковым типом.

В примере, показанном мне по ссылке, все параметры имеют строковый тип.Что бы вы сделали, если бы параметр не был строковым типом?Вот ссылка, если вас интересует: http://csharp -video-tutorials.blogspot.com / 2013/03 / gridview-insert-update-delete-in-aspnet_13.html

protected void lbInsert_Click(object sender, EventArgs e)
{
    ObjectDataSource1.InsertParameters["Name"].DefaultValue =
        ((TextBox)GridView1.FooterRow.FindControl("txtName")).Text;
    ObjectDataSource1.InsertParameters["Gender"].DefaultValue =
        ((DropDownList)GridView1.FooterRow.FindControl("ddlInsertGender")).SelectedValue;
    ObjectDataSource1.InsertParameters["City"].DefaultValue =
        ((TextBox)GridView1.FooterRow.FindControl("txtCity")).Text;
    ObjectDataSource1.Insert();
} 



<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
    DeleteMethod="DeleteEmployee" InsertMethod="InsertEmployee" 
    SelectMethod="GetAllEmployees" TypeName="Demo.EmployeeDataAccessLayer" 
    UpdateMethod="UpdateEmployee">
    <DeleteParameters>
        <asp:Parameter Name="EmployeeId" Type="Int32" />
    </DeleteParameters>
    <InsertParameters>
        <asp:Parameter Name="Name" Type="String" />
        <asp:Parameter Name="Gender" Type="String" />
        <asp:Parameter Name="City" Type="String" />
    </InsertParameters>
    <UpdateParameters>
         ....
    </UpdateParameters>
</asp:ObjectDataSource>

// Insert Method for ObjectDataSource control
    public static int InsertEmployee(string Name, string Gender, string City)
    {
        string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
        using (SqlConnection con = new SqlConnection(CS))
        {
            string updateQuery = "Insert into tblEmployee (Name, Gender, City)" + 
                " values (@Name, @Gender, @City)";
            SqlCommand cmd = new SqlCommand(updateQuery, con);
            SqlParameter paramName = new SqlParameter("@Name", Name);
            cmd.Parameters.Add(paramName);
            SqlParameter paramGender = new SqlParameter("@Gender", Gender);
            cmd.Parameters.Add(paramGender);
            SqlParameter paramCity = new SqlParameter("@City", City);
            cmd.Parameters.Add(paramCity);
            con.Open();
            return cmd.ExecuteNonQuery();
        }

В моем случае у меня нет строкового параметра.поэтому я не знаю, как закодировать мой щелчок кнопки вставки, который находится в нижнем колонтитуле сетки.Мой сценарий:

<asp:ObjectDataSource ID="ObjectDataSource2" runat="server" SelectMethod="GetAllProducts" TypeName="VenketGrid.DataAccessLayer2" UpdateMethod="UpdateProduct" ConflictDetection = "CompareAllValues" OldValuesParameterFormatString = "Original_{0}" DeleteMethod="Delete" OnSelecting="ObjectDataSource2_Selecting" OnUpdated="ObjectDataSource2_Updated" InsertMethod="InsertProduct">
            <DeleteParameters>
             ...
            </DeleteParameters>
            <InsertParameters>
                <asp:Parameter Name="Inactive" Type="Boolean" />
                <asp:Parameter Name="CategoryId" Type="Int32" />
                <asp:Parameter Name="Description" Type="String" />
                <asp:Parameter Name="CurrentPrice" Type="Decimal" />
                <asp:Parameter Name="Modified" Type="DateTime" />
            </InsertParameters>
            <UpdateParameters>
                ...
            </UpdateParameters>
        </asp:ObjectDataSource>


// Insert Method for ObjectDataSource control

    public static int InsertProduct(bool Inactive, int CategoryId, string Description, Decimal CurrentPrice, DateTime Modified)
    {

        string ConnectionString;
        ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DBConn"].ToString();

        SqlConnection con = new SqlConnection(ConnectionString);

        SqlCommand cmd = new SqlCommand("_SP_Insert_RefProducts", con);

        cmd.CommandType = System.Data.CommandType.StoredProcedure;

        cmd.Parameters.Add(new SqlParameter("@Inactive", Inactive));

        cmd.Parameters.Add(new SqlParameter("@CategoryId", CategoryId));

        cmd.Parameters.Add(new SqlParameter("@Description", Description));

        cmd.Parameters.Add(new SqlParameter("@CurrentPrice", CurrentPrice));

        con.Open();

        int affected;

        affected = cmd.ExecuteNonQuery();
        con.Close();

        return affected;

    }

1 Ответ

0 голосов
/ 09 июня 2019

Поскольку DefaultValue в этом коде является строковым типом:

ObjectDataSource1.InsertParameters["Name"].DefaultValue =  ....   

, я должен использовать строковые параметры в методе Insert используйте любой кастинг, который вам нужен для реализации этого способа ... Я не знаю лучшего способа решить этот вопрос. Но я могу принять другой ответ, если кто-нибудь отправит лучший ответ ...

    public static int InsertProduct(string Inactive, string CategoryId, string Description, string CurrentPrice, string Modified)
    {

        string ConnectionString;
        ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DBConn"].ToString();

        SqlConnection con = new SqlConnection(ConnectionString);

        SqlCommand cmd = new SqlCommand("_SP_Insert_RefProducts", con);

        cmd.CommandType = System.Data.CommandType.StoredProcedure;

        cmd.Parameters.Add(new SqlParameter("@Inactive", Inactive=="1"?1:0 ));


        cmd.Parameters.Add(new SqlParameter("@CategoryId", int.Parse(CategoryId)            ));

        Description = Description + "                                                                                             ";
        cmd.Parameters.Add(new SqlParameter("@Description", Description.Substring(0,50)));

        cmd.Parameters.Add(new SqlParameter("@CurrentPrice", double.Parse(CurrentPrice)));

        con.Open();

        int affected;

        affected = cmd.ExecuteNonQuery();
        con.Close();

        return affected;

    }
...