2010-09-15 23 views
7

Tôi đang cố thực hiện lệnh chèn vào cơ sở dữ liệu và một trong các cột thuộc loại nvarchar (MAX). Lệnh chèn được tạo bằng cách sử dụng lớp .NET SqlCommand và mỗi tham số được biểu diễn bởi một đối tượng SqlParameter.Sử dụng các chuỗi rất dài (10000 ký tự) làm giá trị SqlParameter

Lệnh của tôi được thực hiện luôn, nhưng khi tôi vượt qua chuỗi có độ dài lớn (10000 ký tự) và được sử dụng làm giá trị cho SqlParameter ánh xạ tới cột loại nvarchar (MAX) sau khi chèn, cụ thể cột để trống. Tôi lặp lại, không có ngoại lệ được ném, lệnh INSERT được thực thi, nhưng cột trống.

ví dụ Sau đây là làm thế nào tôi đã cố gắng để tạo ra tham số:

// message is the large string variable 
// first solution 
insertCommand.Parameters.Add("@message", SqlDbType.NVarChar, -1); 

// second solution 
insertCommand.Parameters.Add("@message", SqlDbType.NVarChar, message.Length); 

// third solution 
insertCommand.Parameters.Add("@message", SqlDbType.NVarChar, message.Length * 2); 

Không ai trong số những giải pháp đã đưa ra kết quả. Nếu có ai biết vấn đề là gì, xin hãy cho tôi biết.

Tôi đang sử dụng MS SQL Server 2008.

Xin cảm ơn trước.

+1

Bạn có đặt giá trị không? Tất cả những gì tôi thấy là bạn tạo một tham số, nhưng không có giá trị nào được gán. –

Trả lời

1

Một đề xuất khác để thử: sử dụng SqlDbType.NText thay vì SqlDbType.NVarChar.

0

Một đề xuất .. Bạn đã thử sử dụng SqlDbType.XML ... Không cần phân tích cú pháp xml ở đầu kia ... bạn có thể lưu trữ giá trị trong varchar.

6

Theo MSDN

nvarchar:

String. Một chuỗi ký tự Unicode có độ dài thay đổi nằm trong khoảng từ 1 và 4.000 ký tự. Chuyển đổi ngầm định không thành công nếu chuỗi lớn hơn 4.000 ký tự. Đặt rõ ràng đối tượng khi làm việc với chuỗi dài hơn 4.000 ký tự.

Dưới đây là ntext:

String. Dữ liệu Unicode có độ dài thay đổi là với chiều dài tối đa là 2 30 - 1 (hoặc 1,073,741,823) ký tự.

cũng kiểm tra this

+0

Sửa lỗi định dạng của bạn một chút :). –

+2

'ntext' không được chấp nhận, do đó, là' văn bản' và 'hình ảnh'. 'nvarchar (max)' thay thế 'ntext' –

+0

@Pierre: Chúng ta đang nói về SqlDbType (http://msdn.microsoft.com/en-US/library/system.data.sqldbtype(v=VS.80). aspx), nằm ở phía khách hàng. Những gì bạn nói là đúng chỉ cho phía máy chủ. –

3

Các bạn đã thử gọi AddWithValue(String name, Object value)?

+0

+1 để nhận thấy rằng anh ta đang tạo tham số, nhưng không thực sự thiết lập giá trị của tham số. –

0

Bạn vẫn còn có vấn đề nếu bạn dứt khoát tạo SqlParameter, như:

SqlParameter t = new SqlParameter("@" + name, type); 
t.Value = value; 

và sau đó thêm nó vào các thông số?

Ngoài ra nếu bạn đang gọi một sproc, chỉ để đảm bảo rằng param của sproc cũng được khai báo là nvarchar (max), hoặc nếu bạn không sử dụng một sproc cố gắng sử dụng nó. Tôi đã được đẩy varbinary (max) blobs mà không có bất kỳ vấn đề như vậy có lẽ một nhị phân được điều trị tốt hơn.

Các vấn đề liên quan