|
我正在尝试创建一个SqlParameterCollection,但是SqlParameter在sp.Add()方法中添加一些错误。
; F% J+ Z$ U$ ?8 n- X0 g请帮助我如何添加参数以及如何将其传递给在其中声明aSqlConnection和的另一个函数SqlCommand。$ a) O2 l7 d8 [7 q$ Y
SqlParameterCollection sp = null;
- u% }8 L8 S5 l* b+ x# W+ Nsp.Add(new SqlParameter("@CmpyCode", SqlDbType.NVarChar)).Value = CV.Global.CMPYCODE;6 e' f9 ] {3 p O( `- P8 r( L
sp.Add(new SqlParameter("@Code", SqlDbType.NVarChar)).Value = codeName;& u) C/ B3 N: m( H6 F& W' t" K; d' j
sp.Add(new SqlParameter("@DisplayCode", SqlDbType.NVarChar)).Value = codeName + "-";
/ u4 W7 R2 g9 f k! ~: `" lsp.Add(new SqlParameter("@TotalDigit", SqlDbType.Int)).Value = CV.Global.PARAMTOTALDIGIT;2 L5 {; a4 I/ H( U1 k/ x
insertData("", sp);$ c' q+ c5 ~2 _* P: @
我的另一个功能是insertData(…)# k) w0 Y6 C5 y R% g9 X+ i
internal static int insertData(string spName, SqlParameterCollection sp)1 [; z( V$ _9 g9 _2 h/ ?
{( J9 R5 W4 U8 m" t! z6 {- M
int retObj = 0;% M. v' F$ Q J' j# F5 F+ y
using (SqlConnection con = new SqlConnection(CV.Global.CONSTRING))
) Z4 Z- F# X# `4 ? {
+ i$ K% A/ s, L0 i/ I& \ try2 q4 q0 a6 Z' E: x
{
; m7 D8 K3 \2 ? B9 | con.Open();5 X- ]5 Z; N$ z! {+ o% I8 x
SqlCommand cmd = new SqlCommand(spName, con);
0 ], Q' @+ i! ^9 `6 k+ l cmd.CommandType = CommandType.StoredProcedure;; q2 P' V; X. q U3 {9 W2 ^
if (sp.Count > 0)8 a6 ]% p q* j4 s
{
' Y& Z. r( I' {! D6 ?& e foreach (SqlParameter param in sp)
( T! x# x, ~' M+ k( n* c$ b9 j cmd.Parameters.Add(param);$ `* n) x* N# y, K$ M
}' P9 A. x+ \2 Z
retObj = cmd.ExecuteNonQuery();
8 |+ x. C9 n* S: G }5 {9 f& d: r6 |* K. @6 ` g
catch (Exception ev)
9 C( \& l, J# k* Z2 _2 e { 2 @9 P! J5 d6 w6 m6 b
Util.Log(ev);
% |- \* h! |! e+ j; _ throw; 2 q9 y: B2 l- p0 R3 ]( e
}1 s, K1 r2 |' @5 u0 ]
finally# v. D) k$ r1 g3 p! _: `& U
{
/ P }! n* h- i9 A- S try1 O8 D$ x+ t2 j3 Y4 ?3 C
{
+ _; M, {. ^1 g2 X6 H' E con.Close();( o+ H) J! t6 _; U2 o8 j
}, C* \1 R" p' k% u
catch (Exception ev) { Util.Log(ev); throw; }$ E6 ^8 h# I* `6 ?% A4 h/ I6 Y
}5 V K8 k8 P, i& w9 E
}
+ ~& B v0 q9 z8 s p4 j2 p4 s return retObj;! T/ [# e0 ]$ ~+ Y; m
}
1 E& A% n7 `2 Y6 @5 U$ ?我正在尝试创建一个SqlParameterCollection并将其传递给insertData函数。但是,当我sp.Add()在第一个函数中调用方法时,它将引发错误。
1 L& L5 y& T, ~: `* [( I错误是
# ^* `8 W5 I6 h. H- i+ ]
5 n3 Z8 s) R8 g1 y* o! `5 E你调用的对象是空的
: }& ?2 [% ?1 ]6 h8 f* l* I" U! b; j4 y6 B
( E% G7 ~, F( v1 w解决方案:
( q1 R& z, t4 A1 H, ~9 | 7 _5 u `/ }" [. M+ }
% |2 ?% b7 |6 W; s$ d; V1 @
* }) G6 P* y0 f$ |" }1 C 如果不SqlParameterCollection调用其构造函数(新),则不能使用任何变量(例如,参考对象),但是不能使用新变量SqlParameterCollection直接对其进行初始化。它没有公共构造函数,只能从existant的属性中检索SqlCommand。
( X( i: S. U9 _, \8 a! \ SqlCommand cmd = new SqlCommand(commandText, connection);4 I; e6 u9 K/ i E+ O0 E
SqlParameterCollection sp = cmd.Parameters;# F' x8 T- C/ M) p, P. o
我建议将您的InsertData方法更改为接受a,List并让其处理将参数添加到SqlCommand执行命令文本的
& Z- @! |# S. }+ N2 h9 FList sp = new List()1 ~$ h6 |% X3 _: s7 }3 k$ O
{
. I+ r L% y6 ]0 I! F- y7 Q' W new SqlParameter() {ParameterName = "@CmpyCode", SqlDbType = SqlDbType.NVarChar, Value= CV.Global.CMPYCODE}, Y0 N$ \* i) k, E
new SqlParameter() {ParameterName = "@Code", SqlDbType = SqlDbType.NVarChar, Value = codeName},$ o& O4 B+ ^3 [4 s @; H& z
new SqlParameter() {ParameterName = "@DisplayCode", SqlDbType = SqlDbType.NVarChar, Value = codeName + "-"},3 C+ g% [& J3 y4 [% n
new SqlParameter() {ParameterName = "@TotalDigit", SqlDbType = SqlDbType.Int, Value = CV.Global.PARAMTOTALDIGIT}( E* Q9 l0 l4 e! F) Y* K9 q
};
1 C! h+ S( M, n4 }5 }0 p- o, L% VinsertData(CV.Sps.SP_INSERT_PARAM_TABLE, sp);9 f ^& V# u7 ~7 \' Z$ ], b5 E: e" {- K
并insertData简单地接收SqlParameter的可选列表,并将它们添加到内部SqlCommand参数集合(如果需要)/ O! g) e8 v5 i( s' M2 B
internal static int insertData(string spName, List sp = null)
7 x, w) G7 y& D9 J" P{3 m6 h8 T2 y; y# b) _
....
4 L% {% {5 d9 C if(sp != null)
( b9 w" Y d% q: m3 Q0 M- M cmd.Parameters.AddRange(sp.ToArray());
2 I5 n. \& C, f' |8 W. S8 a. z ....
' s; Z7 |6 [, \ L; p* Y, J} |
|