Tôi đang cố chuyển kiểu bảng do người dùng xác định vào truy vấn trong C#.System.ArgumentException: Tham số kiểu bảng phải có tên kiểu hợp lệ
kiểu được định nghĩa với 2 cột (org và org sub)
đây là những gì mã của tôi trông giống như:
DataSet ds = new DataSet();
try
{
DataTable FilteredOrgSubOrg = new DataTable("OrgSubOrgValueType");
FilteredOrgSubOrg.Columns.Add("org", typeof(string));
FilteredOrgSubOrg.Columns.Add("subOrg", typeof(string));
FilteredOrgSubOrg.Rows.Add(org, orgsub);
using (SqlConnection conn = new SqlConnection(cCon.getConn()))
{
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText =
"select * from myTable ex where year = @year' and qtr = @qtr" +
" and EXISTS(SELECT 1 FROM @OrgSubOrg tt WHERE ex.org like tt.org" +
" AND ex.orgsub = tt.suborg )"+
" order by ex.org,year, qtr DESC";
// 2. set the command object so it knows
// to execute a stored procedure
// 3. add parameter to command, which
// will be passed to the stored procedure
cmd.Parameters.Add(new SqlParameter("@OrgSubOrg", FilteredOrgSubOrg));
cmd.Parameters.Add(new SqlParameter("@year", year));
cmd.Parameters.Add(new SqlParameter("@qtr", qtr));
conn.Open();
SqlDataAdapter sqlDA = new SqlDataAdapter();
sqlDA.SelectCommand = cmd;
sqlDA.Fill(ds);
}
}
đang i đi qua các thông số trong sai?
khi tôi làm điều đó trong SQL server như sau:
declare @OrgSubOrg OrgSubOrgValueType
insert into @OrgSubOrg values ('05%','00000000')
insert into @OrgSubOrg values ('03%','00000000')
------------ complete -----------------------------------
select * from myTable ex
where
year = '2013' and qtr = '1'
and EXISTS(
SELECT 1
FROM @OrgSubOrg tt
WHERE ex.org like tt.org
AND ex.orgsub = tt.suborg )
order by ex.org,year, qtr DESC
everything works like it should.
tôi cũng đã cố gắng đi qua nó trong như vậy:
SqlParameter p = cmd.Parameters.Add(new SqlParameter("@OrgSubOrg", SqlDbType.Structured));
p.Value = FilteredOrgSubOrg;
nhưng tôi nhận được lỗi tương tự
The table type parameter '@OrgSubOrg' must have a valid type name.
nó có thể được rằng tôi không thể vượt qua nó vào một lệnh SQL, tôi có mã tương tự ở một nơi khác, mà các công trình lớn với một thủ tục lưu trữ ...?
đã không làm việc như một truy vấn được mã hóa trong mã, một khi tôi đã thực hiện một thủ tục được lưu trữ trong đó, tất cả các vấn đề của tôi đều biến mất. –
Đó chính là vấn đề của tôi. Cảm ơn! – clweeks
Vấn đề của tôi quá, nhiều hơn hoặc ít hơn .. Trong trường hợp của tôi, nó đã là một thủ tục được lưu trữ, nhưng tôi đã thực hiện cuộc gọi đến cơ sở dữ liệu với QueryType.Text. Thay đổi thành QueryType.StoredProcedure đã sửa nó. –