c# - Command.Parameters["@name"].Value Correct syntax -
i attempting use query select table using 1 - 3 parameters;
select * plantareacodes (@areacode null or areacode = @areacode) , (@areaname null or areaname @areaname) , (@comments null or comments @comments); here c# code query:
mysqlcommand = mysqlconnect.createcommand(); mysqlcommand.commandtext = "select * plantareacodes (@areacode null or areacode = @areacode) , (@areaname null or areaname @areaname) , (@comments null or comments @comments);"; mysqlcommand.parameters.add("@areacode", mysqldbtype.int32); mysqlcommand.parameters.add("@areaname", mysqldbtype.varchar); mysqlcommand.parameters.add("@comments", mysqldbtype.text); mysqlcommand.parameters["@areacode"].value = (string.isnullorempty(convert.tostring(pmodel.areacode)) ? (object)dbnull.value : pmodel.areacode); mysqlcommand.parameters["@areaname"].value = (string.isnullorempty(pmodel.areaname) ? (object)dbnull.value : pmodel.areaname); mysqlcommand.parameters["@comments"].value = (string.isnullorempty(pmodel.comments) ? (object)dbnull.value : pmodel.comments); mysqlreader = mysqlcommand.executereader(); this query allows user search one, two, 3 or no fields without throwing errors, works nullable types. therefpre since pmodel.areacode int, search uses 0 instead of null. ie.
select * plantareacodes (null null or areacode = null) , (null null or areaname null) , (null null or comments null); which return no fields because areacode = 0 valid query.
i have tried making areacode nullable declaring int? areacode = null, doesn't work. returns fields, instead of one, same if used default null:
select * plantareacodes (110 null or areacode = 110) , (null null or areaname null) , (null null or comments null); however query returns 1 field:
select * plantareacodes (110 null or areacode = 110) , ('%general%' null or areaname '%general%') , (null null or comments null); this returns fields containing word 'general' in name:
select * plantareacodes (null null or areacode = null) , ('%general%' null or areaname '%general%') , (null null or comments null); how can use non-nullable types in query?
ok got working. main issue needs compare null null, int can't null value type.
so had tweaking code , got working workaround
int? areacode = null; this allowed me change code:
mysqlcommand.parameters["@areacode"].value = (pmodel.areacode.hasvalue ? pmodel.areacode.value : object)dbnull.value ); for aren't aware of what's happening here:
the operator ? gives value type ability have no value, can = null.
ie.
int n = 0; int? n = null; bool b = false; bool? b = null;
Comments
Post a Comment