【发布时间】:2019-07-29 10:01:29
【问题描述】:
我在 .net c# 中使用插入选择查询。当某些值为空时,不会插入数据。
根据我的代码,仅当 Title/category/occupation/gender/MaritalStatusDesc/Qualification 值为空时,才不会插入数据。
INSERT INTO odisha_customer_data
([share _id],
firstname,
middlename,
lastname,
fatherhusbandname,
mothername,
id,
dob,
age,
custnaturedesc,
[date of membership],
religion,
nationality,
uid,
pan,
segment,
introduceraccno,
empcode,
idproof,
idproofno,
residentialproofdesc,
residentialproofno,
annualincomedetails,
[risk category of customer],
[closing bal],
title,
gender,
category,
occupation,
community,
qualification,
maritalstatusdesc)
SELECT @ShareId,
@FirstName,
@MiddleName,
@LastName,
@FatherHusbandName,
@MotherName,
@id,
@DOB,
@Age,
@CustNatureDesc,
@DateofMembership,
@Religion,
@Nationality,
@UID,
@PAN,
@Segment,
@IntroducerAccNo,
@EmpCode,
@IDproof,
@IDProofNo,
@ResidentialProofDesc,
@ResidentialProofNo,
@AnnualIncomeDetails,
@RiskCategoryofcustomer,
@ClosingBal,
t.titleid AS title,
g.genderid AS gender,
cat.catagoryid AS category,
o.occupationid AS Occupation,
c.communityid AS Community,
q.qualificationid AS Qualification,
m.maritalstatusid AS MaritalStatus
FROM title t,
gender g,
catagory cat,
occupation o,
community c,
qualification q,
maritalstatus m
WHERE t.title = @Title
AND g.gendername = @gender
AND cat.catagoryname = @category
AND o.occupationname = @occupation
AND c.communityname = @community
AND q.qualificationname = @Qualification
AND m.maritalstatusdesc = @MaritalStatusDesc
请检查我的代码。并告诉我在给定值为空时设置 Null。
String query = "insert into Odisha_Customer_data([Share _Id], FirstName, MiddleName, LastName, FatherHusbandName, MotherName, "
+ "id, DOB, Age, CustNatureDesc, [Date of Membership], "
+ "Religion, Nationality, UID, PAN, Segment, IntroducerAccNo, EmpCode, IDproof, IDProofNo, ResidentialProofDesc, ResidentialProofNo, "
+ "AnnualIncomeDetails, [Risk Category of customer], [Closing Bal], Title, gender, category, occupation, community, Qualification, MaritalStatusDesc)"+
" SELeCT @ShareId, @FirstName, @MiddleName, @LastName, @FatherHusbandName, @MotherName, @id,"
+ "@DOB, @Age, @CustNatureDesc, @DateofMembership, @Religion, @Nationality, @UID, @PAN,"
+ " @Segment, @IntroducerAccNo, @EmpCode, @IDproof, @IDProofNo, @ResidentialProofDesc, @ResidentialProofNo, @AnnualIncomeDetails, @RiskCategoryofcustomer, @ClosingBal," +
"t.TitleID AS title, g.GenderId AS gender, cat.CatagoryID AS category, o.OccupationID AS Occupation, c.CommunityID AS Community, q.QualificationID AS Qualification," +
" m.MaritalStatusID AS MaritalStatus FROM Title AS t INNER JOIN Gender AS g ON t.Title = @title INNER JOIN Catagory AS cat ON cat.catagoryname = @Category " +
"INNER JOIN Occupation AS o ON o.OccupationName = @Occupation INNER JOIN Community AS c ON c.CommunityName = @Community " +
" INNER JOIN Qualification AS q ON q.QualificationName = @qualification INNER JOIN MaritalStatus AS m ON m.MaritalStatusDesc = @maritalStatusDesc " +
"WHERE @title Is Not Null AND g.gendername = @Gender AND @Category Is Not Null AND @Occupation Is Not Null " +
"AND @Community Is Not Null AND @qualification Is Not Null AND @maritalStatusDesc Is Not Null";
//query = "UPDATE a SET a.MaritalStatusDesc = b.MaritalStatusID From Odisha_Customer_data AS a INNER JOIN MaritalStatus AS b ON b.MaritalStatusDesc = '" + MaritalStatusDesc + "' where a.rowid = (Select max(rowid) as NewCustomer from Odisha_Customer_data)";
SqlCommand cmd = new SqlCommand(query, con);
cmd.Parameters.Add(new SqlParameter("@title", string.IsNullOrEmpty(Title) ? (object)DBNull.Value : Title));
cmd.Parameters.Add(new SqlParameter("@Gender", string.IsNullOrEmpty(gender) ? (object)DBNull.Value : gender));
cmd.Parameters.Add(new SqlParameter("@Occupation", string.IsNullOrEmpty(occupation) ? (object)DBNull.Value : occupation));
cmd.Parameters.Add(new SqlParameter("@Category", string.IsNullOrEmpty(category) ? (object)DBNull.Value : category));
cmd.Parameters.Add(new SqlParameter("@Community", string.IsNullOrEmpty(community) ? (object)DBNull.Value : community));
cmd.Parameters.Add(new SqlParameter("@qualification", string.IsNullOrEmpty(Qualification) ? (object)DBNull.Value : Qualification));
cmd.Parameters.Add(new SqlParameter("@maritalStatusDesc", string.IsNullOrEmpty(MaritalStatusDesc) ? (object)DBNull.Value : MaritalStatusDesc));
cmd.Parameters.Add(new SqlParameter("@ShareId", string.IsNullOrEmpty(ShareId) ? (object)DBNull.Value : ShareId));
cmd.Parameters.Add(new SqlParameter("@FirstName", string.IsNullOrEmpty(FirstName) ? (object)DBNull.Value : FirstName));
cmd.Parameters.Add(new SqlParameter("@MiddleName", string.IsNullOrEmpty(MiddleName) ? (object)DBNull.Value : MiddleName));
cmd.Parameters.Add(new SqlParameter("@LastName", string.IsNullOrEmpty(LastName) ? (object)DBNull.Value : LastName));
cmd.Parameters.Add(new SqlParameter("@FatherHusbandName", string.IsNullOrEmpty(FatherHusbandName) ? (object)DBNull.Value : FatherHusbandName));
cmd.Parameters.Add(new SqlParameter("@MotherName", string.IsNullOrEmpty(MotherName) ? (object)DBNull.Value : MotherName));
cmd.Parameters.Add(new SqlParameter("@id", string.IsNullOrEmpty(id) ? (object)DBNull.Value : id));
cmd.Parameters.Add(new SqlParameter("@DOB", string.IsNullOrEmpty(DOB) ? (object)DBNull.Value : DOB));
cmd.Parameters.Add(new SqlParameter("@Age", string.IsNullOrEmpty(Age) ? (object)DBNull.Value : Age));
cmd.Parameters.Add(new SqlParameter("@CustNatureDesc", string.IsNullOrEmpty(CustNatureDesc) ? (object)DBNull.Value : CustNatureDesc));
cmd.Parameters.Add(new SqlParameter("@DateofMembership", string.IsNullOrEmpty(DateofMembership) ? (object)DBNull.Value : DateofMembership));
cmd.Parameters.Add(new SqlParameter("@Religion", string.IsNullOrEmpty(Religion) ? (object)DBNull.Value : Religion));
cmd.Parameters.Add(new SqlParameter("@Nationality", string.IsNullOrEmpty(Nationality) ? (object)DBNull.Value : Nationality));
cmd.Parameters.Add(new SqlParameter("@UID", string.IsNullOrEmpty(UID) ? (object)DBNull.Value : UID));
cmd.Parameters.Add(new SqlParameter("@PAN", string.IsNullOrEmpty(PAN) ? (object)DBNull.Value : PAN));
cmd.Parameters.Add(new SqlParameter("@Segment", string.IsNullOrEmpty(Segment) ? (object)DBNull.Value : Segment));
cmd.Parameters.Add(new SqlParameter("@IntroducerAccNo", string.IsNullOrEmpty(IntroducerAccNo) ? (object)DBNull.Value : IntroducerAccNo));
cmd.Parameters.Add(new SqlParameter("@EmpCode", string.IsNullOrEmpty(EmpCode) ? (object)DBNull.Value : EmpCode));
cmd.Parameters.Add(new SqlParameter("@IDproof", string.IsNullOrEmpty(IDproof) ? (object)DBNull.Value : IDproof));
cmd.Parameters.Add(new SqlParameter("@IDProofNo", string.IsNullOrEmpty(IDProofNo) ? (object)DBNull.Value : IDProofNo));
cmd.Parameters.Add(new SqlParameter("@ResidentialProofDesc", string.IsNullOrEmpty(ResidentialProofDesc) ? (object)DBNull.Value : ResidentialProofDesc));
cmd.Parameters.Add(new SqlParameter("@ResidentialProofNo", string.IsNullOrEmpty(ResidentialProofNo) ? (object)DBNull.Value : ResidentialProofNo));
cmd.Parameters.Add(new SqlParameter("@AnnualIncomeDetails", string.IsNullOrEmpty(AnnualIncomeDetails) ? (object)DBNull.Value : AnnualIncomeDetails));
cmd.Parameters.Add(new SqlParameter("@RiskCategoryofcustomer", string.IsNullOrEmpty(RiskCategoryofcustomer) ? (object)DBNull.Value : RiskCategoryofcustomer));
cmd.Parameters.Add(new SqlParameter("@ClosingBal", string.IsNullOrEmpty(ClosingBal) ? (object)DBNull.Value : ClosingBal));
cmd.ExecuteNonQuery();
con.Close();
我的完整代码是这样的,我只想要标题、性别等字符串值为空的地方,然后将 Null 保存在 DB 表中。但是使用此代码,只要标题、性别等字符串值为空,则不会插入数据。如果所有字符串都有值,那么数据将完美保存。请查看代码并纠正我。
【问题讨论】:
-
您的列是否设置为允许 null 值?
-
为什么?首先你是什么意思
empty?空字符串不是 NULL,它是具有明确定义值的字符串。它可以插入到非空列中。导致问题的是 NULL's,而不是“空”字符串 -
检查每个可空列的 IsNullOrEmpty() 并为它们传递 DBNull.Value
-
对于查询本身,它会生成符合条件的所有标题、性别、类别等行的笛卡尔积。除非每个条件只返回 一个 结果,否则您可能会为同一个人获得多个条目。那是你真正想要的吗?您是否期望以这种方式从每个表中只获取一行,而不是编写正确的查找?
-
进化——没有人应该使用old style joins。
标签: sql sql-server