Преобразование nvarchar в int приводит к сообщению об ошибке - PullRequest
0 голосов
/ 08 апреля 2019
// https://www.codeproject.com/Questions/823002/How-to-clear-Request-Querystring

string url = context.Request.Url.AbsoluteUri; // Henter URL
string[] separateURL = url.Split('?'); // Splitter URL

NameValueCollection queryString = System.Web.HttpUtility.ParseQueryString(separateURL[0]); // Parameterne

string categoryId = queryString[0];  // Index 0 er categoryId

StringBuilder table = new StringBuilder();

con.Open();

SqlCommand cmd = new SqlCommand("uspPasteDataSubCategories", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@categoryid", categoryId);

SqlDataReader rd = cmd.ExecuteReader();

Я получаю эту ошибку:

System.Data.SqlClient.SqlException: 'Ошибка преобразования типа данных nvarchar в int.'

, что не имеет смысла, потому что тип данных не nvarchar в базе данных.

Ошибка происходит в:

SqlDataReader rd = cmd.ExecuteReader();

Хранимая процедура:

ALTER PROCEDURE [dbo].[uspPasteDataSubCategories]
    @categoryid INT
AS
    SELECT 
        SubCategory.subcategoryid, SubCategory.subcategoryname 
    FROM 
        Category, Category_SubCategory, SubCategory
    WHERE 
        Category.categoryid = @categoryid
        AND Category.categoryid = Category_SubCategory.categoryid
        AND SubCategory.subcategoryid = Category_SubCategory.subcategoryid

1 Ответ

0 голосов
/ 08 апреля 2019
// The stored procedure is expecting an int as the parameter type
string url = context.Request.Url.AbsoluteUri; // Henter URL
string[] separateURL = url.Split('?'); // Splitter URL

NameValueCollection queryString = System.Web.HttpUtility.ParseQueryString    (separateURL[0]); // Parameterne

string strCategoryId = queryString[0];  // Index 0 er categoryId

StringBuilder table = new StringBuilder();

con.Open();

SqlCommand cmd = new SqlCommand("uspPasteDataSubCategories", con);
cmd.CommandType = CommandType.StoredProcedure;
//Convert the string value to int
int categoryId = Int32.Parse(strCategoryId);

//Changed to use add verse AddWithValue. This way you can set the type for the parameter. Then you can set the value.
cmd.Parameters.Add("@categoryid", SqlDbType.Int);
cmd.Parameters["@categoryid"].Value = categoryId;

SqlDataReader rd = cmd.ExecuteReader();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...