繁体   English   中英

如何将 ExecuteScalar() 的结果转换为 int?

[英]How do I convert the result of ExecuteScalar() to int?

我实际上是在尝试使用ExecuteScalar()在插入后获取主键。 因为它在插入后返回第一行的第一列。 但我得到 0。我不知道为什么会这样。 请帮帮我。

query = "Insert into Admissions(Admission_date, Student_name, Father_name, Mother_name, DOB, Gender, Address, State, City, Pincode, Admission_for, Previous_school, Fees) values ('" + txtAdmDate.Text + "','" + txtStudentName.Text + "','" + txtFatherName.Text + "','" + txtMotherName.Text + "','" + dob + "','" + gender + "','" + txtAddress.Text + "','" + txtState.Text + "','" + txtCity.Text + "','" + txtPincode.Text + "','" + cmbClass.Text + "','" + txtPreviousSchool.Text + "','" + txtFees.Text + "')";

cmd = new SqlCommand(query, con);
con.Open();

int admid = Convert.ToInt32(cmd.ExecuteScalar());

您的代码/问题存在一些问题。

  1. 您的代码容易受到SQL 注入攻击。 您需要参数化您的查询

  2. INSERT 语句的设计并不意味着返回任何内容,如果您想返回刚刚插入的主键,您需要在查询中使用输出参数(更好的是,存储过程)。

  3. 快速搜索“在 sql insert c# 上返回主键”会给您大量结果。 您的问题在这里几乎是一字不差的。 事实上,我的答案基本上是最重要的答案代码(修改供您使用)。

这是我的答案

//Create an Admission class that represents your data
public static int Save(Admission admission)
{
    var conn = DbConnect.Connection();
    const string sqlString = "Admissions(Admission_date, Student_name, Father_name, Mother_name, DOB, Gender, " +
        "Address,   State, City, Pincode, Admission_for, Previous_school, Fees) values (@AdmissionDate, @StudentName, " + 
        "@FatherName, @MotherName, @DOB, @Gender, @Address, @State, @City, @Pincode, @AdmissionFor, @PreviousSchool, " +
        "@Fees) SELECT SCOPE_IDENTITY()";

    using (conn)
    {
        using (var cmd = new SqlCommand(sqlString, conn))
        {
            cmd.Parameters.AddWithValue("@AdmissionDate", admission.AdmissionDate);
            cmd.Parameters.AddWithValue("@StudentName", admission.StudentName);
            cmd.Parameters.AddWithValue("@FatherName", admission.FatherName);
            cmd.Parameters.AddWithValue("@MotherName", admission.MotherName);
            cmd.Parameters.AddWithValue("@DOB", admission.DOB);
            cmd.Parameters.AddWithValue("@Gender", admission.Gender);
            cmd.Parameters.AddWithValue("@Address", admission.Address);
            cmd.Parameters.AddWithValue("@State", admission.State);
            cmd.Parameters.AddWithValue("@City", admission.City);
            cmd.Parameters.AddWithValue("@Pincode", admission.Pincode);
            cmd.Parameters.AddWithValue("@AdmissionFor", admission.AdmissionFor);
            cmd.Parameters.AddWithValue("@PreviousSchool", admission.PreviousSchool);
            cmd.Parameters.AddWithValue("@Fees", admission.Fees);

            cmd.CommandType = CommandType.Text;
            conn.Open();
            return (int)(decimal)cmd.ExecuteScalar();
        }
    }
}

尝试在您的 SQL 命令中使用OUTPUT子句来返回有关您的命令的信息。

public int NewProperty(PropertyData propertyData)
    {
        using (SqlConnection con = new SqlConnection(CS))
        {
            SqlCommand cmd = new SqlCommand("InsertUpdateProperty", con);

            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@id", propertyData.ID);
            cmd.Parameters.AddWithValue("@ListPropertyFor", propertyData.ListPropertyFor);
            cmd.Parameters.AddWithValue("@PropertyTypeId", propertyData.PropertyTypeId);
            cmd.Parameters.AddWithValue("@PropertyLoction", propertyData.PropertyLocation);
            cmd.Parameters.AddWithValue("@Locality", propertyData.Locality);
            cmd.Parameters.AddWithValue("@ProjectName", propertyData.ProjectName);
            cmd.Parameters.AddWithValue("@PropertyDescription", propertyData.PropertyDescription);
            cmd.Parameters.AddWithValue("@SuperBulidupArea", propertyData.SuperBulidupArea);
            cmd.Parameters.AddWithValue("@SuperBulidupId", propertyData.SuperBulidupAreaId);
            cmd.Parameters.AddWithValue("@BulidupArea", propertyData.BulidupArea);
            cmd.Parameters.AddWithValue("@BulidupAreaId", propertyData.BulidupAreaId);
            cmd.Parameters.AddWithValue("@CarpetArea", propertyData.CarpetArea);
            cmd.Parameters.AddWithValue("@CarpetAreaId", propertyData.CarpetAreaId);
            cmd.Parameters.AddWithValue("@Bathrooms", propertyData.Bathrooms);
            cmd.Parameters.AddWithValue("@Bedrooms", propertyData.Bedrooms);
            cmd.Parameters.AddWithValue("@Balconies", propertyData.Balconies);
            cmd.Parameters.AddWithValue("@FurnishedId", propertyData.FurnishedId);
            cmd.Parameters.AddWithValue("@TotalFloors", propertyData.TotalFloors);
            cmd.Parameters.AddWithValue("@PropertyOnFloors", propertyData.PropertyOnFloor);
            cmd.Parameters.AddWithValue("@Parking", propertyData.Parking);
            cmd.Parameters.AddWithValue("@AvalibiltyId", propertyData.AvalibiltyId);
            cmd.Parameters.AddWithValue("@AgeOfProperty", propertyData.AgeOfProperty);
            cmd.Parameters.AddWithValue("@OwnerShip", propertyData.OwenerShip);
            cmd.Parameters.AddWithValue("@Price", propertyData.Price);
            cmd.Parameters.AddWithValue("@IsActive", propertyData.IsActive);

            con.Open();

            int i = Convert.ToInt32(cmd.ExecuteScalar()); 

            con.Close();
            return i;
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM