繁体   English   中英

ASP.NET错误将数据类型nvarchar转换为数字

[英]ASP.NET Error converting datatype nvarchar to numeric

我正在尝试将产品详细信息插入到我的产品表中以进行存储,然后从中进行选择以显示

我已经尝试过了

cmd.Parameters.AddWithValue("ProdPrice", Convert.ToInt32(txtProdPrice.Text));

cmd.Parameters.AddWithValue("ProdPrice", decimal.Parse(txtProdPrice.Text));

cmd.Parameters.AddWithValue("prodStock", int.Parse(txtProdStock.Text));

产品表

CREATE TABLE [dbo].[Product] (
    [ProdID]    INT             IDENTITY (1, 1) NOT NULL,
    [ProdName]  NVARCHAR (50)   NOT NULL,
    [ProdPrice] DECIMAL (18, 2) NULL,
    [ProdDesc]  NVARCHAR (MAX)  NULL,
    [ImageName] NVARCHAR (255)  NULL,
    [Size]      INT             NULL,
    [ImageData] VARBINARY (MAX) NULL,
    [ProdBrand] NVARCHAR (50)   NULL,
    [ProdStock] INT             NULL,
    PRIMARY KEY CLUSTERED ([ProdID] ASC)

.ASPX.CS代码

string cs = ConfigurationManager.ConnectionStrings["DataBase"].ConnectionString;
            using (SqlConnection con = new SqlConnection(cs))
            {
                SqlCommand cmd = new SqlCommand("insert into Product values (@ProdName, @ProdDesc, @ProdPrice, @ImageName, @Size, @ImageData, @ProdBrand, @ProdStock);", con);
                cmd.Parameters.AddWithValue("ProdName", txtProdName.Text);
                cmd.Parameters.AddWithValue("ProdDesc", txtProdDesc.Text);
                cmd.Parameters.AddWithValue("ProdPrice", decimal.Parse(txtProdPrice.Text));
                cmd.Parameters.AddWithValue("ImageName", fileName);
                cmd.Parameters.AddWithValue("Size", fileSize);
                cmd.Parameters.AddWithValue("ImageData", bytes);
                cmd.Parameters.AddWithValue("ProdBrand", ddlBrand.SelectedItem.Text);
                cmd.Parameters.AddWithValue("prodStock", int.Parse(txtProdStock.Text));


                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();

                lblImageResult.Visible = true;
                lblImageResult.Text = "Upload Successful";
                lblImageResult.ForeColor = System.Drawing.Color.Green;

所有结果仍然相同,“将数据类型nvarchar转换为数字时出错”

如果未在insert语句中指定字段,则提供的值应按表的列顺序排列。

... insert into Product values (@ProdName, @ProdPrice, @ProdDesc, ....

如前所述,当您未在插入中指定列名时,假定参数与表列的顺序相同。 在您的情况下,ProdDesc和ProdPrice参数与其各自的表列的顺序不同,因此出错。

要么重新排序这些参数,要么更好地指定查询中的列:

SqlCommand cmd = new SqlCommand("insert into Product (ProdName, ProdDesc, ProdPrice, ImageName, Size, ImageData, ProdBrand, ProdStock) values (@ProdName, @ProdDesc, @ProdPrice, @ImageName, @Size, @ImageData, @ProdBrand, @ProdStock);", con);

另外,请考虑避免使用Parameters.AddWithValue

ProdID是标识列,没有指定列字段名称,这就是为什么它试图插入ProdID列但ProdID是INT值。

SqlCommand cmd = new SqlCommand("insert into Product (ProdName,ProdDesc,ProdPrice,ImageName,Size,ImageData,ProdBrand,ProdStock) values (@ProdName, @ProdDesc, @ProdPrice, @ImageName, @Size, @ImageData, @ProdBrand, @ProdStock);", con)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM