.net - SQL UDT Type parameter pass in C# -


i have sql udt type

create type [dbo].[udtname] nvarchar(50) null go 

and using in procedure insert data db. procedure this

create procedure [dbo].[proc_name] (   @param1 int,   @param2 int,   @param3 udtname,   @param4 udtcomment,   @param5 udttype   = '' output,   @param6 udttype   = '' output ) 

when calling procedure c# code, udt type data not saving in table.

my c# code:

  private idictionary<string, string> runquery(string procname, list<parameter> input) { foreach (parameter inputpair in input)                     {          sqlparameter sp = new sqlparameter("@" + inputpair.name , inputpair.type);                       // have tried sqldbtype varchar, nvarchar          sp.direction = system.data.parameterdirection.input          sp.sqldbtype = sqldbtype.udt;          // have if condition around check if udt type add udttypename           sp.udttypename = "udtname"; // have tried dbo.udtname          sp.size = inputpair.size; //setting in case of varchar          sp.value = inputpair.value;           cmd.parameters.add(sp);  }   cmd.commandtype = commandtype.storedprocedure;                  param1.parametername = "@param5";                 param1.sqldbtype = system.data.sqldbtype.varchar;                 param1.size = 255;                 param1.direction = system.data.parameterdirection.output;                 cmd.parameters.add(param1);   _reader = cmd.executereader(); } 

parameter class

     public class parameter         {             public string name { get; set; }             public object value { get; set; }             public object type { get; set; }             public bool isudt { get; set; }             public int size { get; set; } public bool udttypename  { get; set; }         } 

but not inserting data db , throwing following exception:

result message: system.exception : specified type not registered on target server.system.string, mscorlib, version=4.0.0.0, culture=neutral, publickeytoken=b77a5c561934e089.

if using varchar sqldbtype in place of udttype sqldbtype in code, running not inserting data tables.

i did research everywhere people using table value pair base udt type.

note: don't have privileges alter in sql db.

edit

i tried datatable also

my code:

 datatable datatable = new datatable("udtname");                             datatable.columns.add();                             datatable.rows.add("my_value");                              var inputparam = cmd.parameters.addwithvalue("@param3", datatable);                             inputparam.sqldbtype = sqldbtype.structured;                             inputparam.direction = system.data.parameterdirection.input; 

it showing below error:

result message: system.exception : operand type clash: table type incompatible nvarchar(50)

you need correctly specify 2 types (sp.sqldbtype, sp.udttypename), name , value.

it looks either setting wrong value or incorrect sp.udttypename.

check way creating sqlparameter:

sqlparameter sp = new sqlparameter("@" + inputpair.name , inputpair.type); 

the problem here inputpair.type of type object.

so following constructor called:

public sqlparameter( string parametername , object value ) 

instead of other might expect:

public sqlparameter( string parametername , sqldbtype dbtype ) 

your code should instead:

sqlparameter sp = new sqlparameter("@" + inputpair.name , value); sp.sqldbtype = sqldbtype.udt; sp.udttypename = "udtname"; 

https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.udttypename(v=vs.90).aspx


Comments

Popular posts from this blog

html - Outlook 2010 Anchor (url/address/link) -

javascript - Why does running this loop 9 times take 100x longer than running it 8 times? -

Getting gateway time-out Rails app with Nginx + Puma running on Digital Ocean -