|
我正在尝试创建一个SqlParameterCollection,但是SqlParameter在sp.Add()方法中添加一些错误。
) D K6 H# ^: g7 a& }% O) R请帮助我如何添加参数以及如何将其传递给在其中声明aSqlConnection和的另一个函数SqlCommand。
$ j) I3 M o' w0 ^9 e9 m/ `- [. dSqlParameterCollection sp = null; ' N+ v& J3 f. r7 ?( J
sp.Add(new SqlParameter("@CmpyCode", SqlDbType.NVarChar)).Value = CV.Global.CMPYCODE;& W8 F) x* V1 j) Z# s+ h4 k* d
sp.Add(new SqlParameter("@Code", SqlDbType.NVarChar)).Value = codeName;5 E, r7 m$ _1 P( E) j1 ^( [
sp.Add(new SqlParameter("@DisplayCode", SqlDbType.NVarChar)).Value = codeName + "-";5 _; A9 {/ `% d% H& b( O
sp.Add(new SqlParameter("@TotalDigit", SqlDbType.Int)).Value = CV.Global.PARAMTOTALDIGIT;
+ v" l( r# u7 Z8 u" oinsertData("", sp);' X1 X, `/ J u8 e4 m
我的另一个功能是insertData(…)
$ c% S- I9 _% f0 E/ iinternal static int insertData(string spName, SqlParameterCollection sp)
2 X: _0 r# T# l/ ~: x$ _{
( Q; B8 g d+ D7 W& C/ X( B# ? int retObj = 0;# v/ ?7 k; d7 |; x
using (SqlConnection con = new SqlConnection(CV.Global.CONSTRING))
S0 j) O2 U x+ v0 J {
4 `+ l# Z0 \3 L0 C# Z try
$ r, |+ ?1 I# j' ^ {0 t* {$ d' B% ]/ z
con.Open();
( s" L: }. ^/ W, {" A% J6 W SqlCommand cmd = new SqlCommand(spName, con);
, Q5 e: \5 D8 o# T9 p% j0 d* c: n cmd.CommandType = CommandType.StoredProcedure;
/ V( W! n2 c- M3 X- X" J+ k if (sp.Count > 0)! ?8 v( e4 c, L+ R, T
{
' z2 N# y+ c( m, F; k0 c; d foreach (SqlParameter param in sp)2 u8 W' a7 A5 j7 S
cmd.Parameters.Add(param);6 p) e6 s/ L' v- l7 p
}4 h" i4 M' s! E9 |
retObj = cmd.ExecuteNonQuery();4 z( Q& w$ u* ~3 _2 {& U
}# d9 ]7 z3 u7 m {# w
catch (Exception ev)
1 q$ K6 G( T7 P5 d5 {- S { $ C2 I3 ?. U- `! u
Util.Log(ev); & h4 d8 @1 o, h9 c* N5 V X8 q
throw;
0 A' [) G# c u5 V }6 X7 j4 Y2 w4 v& A# U
finally7 K' N7 A. E& J9 Q
{8 u- J! Q9 v: A% s
try
, d6 Z$ A, S; |7 w {* ]! p4 v( g" s
con.Close();% \5 Z$ c( ?( F: a" ] Q4 x* S6 G( @; z
}4 g, J; h; [% G7 O3 D9 c
catch (Exception ev) { Util.Log(ev); throw; }
- b! A' `8 a' E6 Y3 N, h0 |- D }' W# _+ Z' @% C1 O# r( i7 {8 a
}$ H a6 _) M3 I- B( }
return retObj; W3 e" ~+ m& n( I9 c/ r
}
! c* c! b/ C o$ D( o% f我正在尝试创建一个SqlParameterCollection并将其传递给insertData函数。但是,当我sp.Add()在第一个函数中调用方法时,它将引发错误。 M! k1 H/ @% B9 J) Z/ R1 P8 M
错误是
$ \ \/ Z) I( c$ Q# d: z& X: d# C1 k6 ?8 X8 p
你调用的对象是空的
( G6 k6 O0 a) i0 P( T
p' v6 X1 g& N/ |$ a7 [* E
% A* b4 D% x2 u) K4 t. Y/ M解决方案:
9 u1 J) z/ Z4 H$ l9 \ 5 B0 h' M$ @) C6 w+ w, P5 Y
0 t# K, J& I, j4 O) b7 w w
5 L6 M7 O/ F- R7 P2 l: B 如果不SqlParameterCollection调用其构造函数(新),则不能使用任何变量(例如,参考对象),但是不能使用新变量SqlParameterCollection直接对其进行初始化。它没有公共构造函数,只能从existant的属性中检索SqlCommand。. B" q" r( Y1 c+ i
SqlCommand cmd = new SqlCommand(commandText, connection);
: X# \ l' X1 b! {1 Z SqlParameterCollection sp = cmd.Parameters;3 w4 K0 H+ K. d' h7 H& Y; T
我建议将您的InsertData方法更改为接受a,List并让其处理将参数添加到SqlCommand执行命令文本的
6 \5 i' Y& J3 k& H8 ?# {List sp = new List()- K. [ w# o8 S% E8 ~* d& N& h
{
7 j1 L/ C' C; F+ v. W) ^; R new SqlParameter() {ParameterName = "@CmpyCode", SqlDbType = SqlDbType.NVarChar, Value= CV.Global.CMPYCODE},
6 z/ F* f+ `9 X% |( G new SqlParameter() {ParameterName = "@Code", SqlDbType = SqlDbType.NVarChar, Value = codeName},
" B; ~1 D+ ~0 g3 | new SqlParameter() {ParameterName = "@DisplayCode", SqlDbType = SqlDbType.NVarChar, Value = codeName + "-"},2 [, a7 g# K, o" M1 \$ a
new SqlParameter() {ParameterName = "@TotalDigit", SqlDbType = SqlDbType.Int, Value = CV.Global.PARAMTOTALDIGIT}! [4 u" B8 f# @/ I0 w, p( g) `& Y* O
};
; I0 o" G4 o" c. @1 H" ginsertData(CV.Sps.SP_INSERT_PARAM_TABLE, sp);
+ n2 O) E: D r3 n& |并insertData简单地接收SqlParameter的可选列表,并将它们添加到内部SqlCommand参数集合(如果需要). _5 p' x( r1 O% b
internal static int insertData(string spName, List sp = null)
4 u9 }2 Z( A. }* r2 |* B( Z{
% y W {# q# F. u V5 ]6 ~ ....3 I6 \2 ~. t1 c2 p6 j8 d
if(sp != null)2 Z" E/ `: {, v! k) r r
cmd.Parameters.AddRange(sp.ToArray());1 c3 K! n( M9 y- P, P
....0 s, k; E4 O9 [3 Y' S' W% Y
} |
|