ASP.NET将数据类型nvarchar转换为数值时出错

时间:2019-07-09 09:01:44

标签: c# asp.net

我试图将产品详细信息插入我的产品表中以进行存储,然后从中选择要显示的内容

我已经尝试过

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转换为数字时出错”

3 个答案:

答案 0 :(得分:4)

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

library(data.table)
WDI <- fread("CountryName   CountryCode IndicatorName   IndicatorCode   1960    1961    2017
ArabWorld   ARB A   FX.OWN.TOTL.ZS  37.16521072 37.16521072 37.16521072
ArabWorld   ARB B   FX.OWN.TOTL.FE.ZS   25.63540268 25.63540268 25.63540268
ArabWorld   ARB C   FX.OWN.TOTL.MA.ZS   48.32851791 48.32851791 48.32851791
ArabWorld   ARB D   FX.OWN.TOTL.OL.ZS   42.54204559 42.54204559 42.54204559
ArabWorld   ARB E   FX.OWN.TOTL.40.ZS   27.72478104 27.72478104 27.72478104
ArabWorld   ARB F   FX.OWN.TOTL.PL.ZS   26.45811081 26.45811081 26.45811081
ArabWorld   ARB G   FX.OWN.TOTL.60.ZS   43.44695282 43.44695282 43.44695282
ArabWorld   ARB H   FX.OWN.TOTL.SO.ZS   48.66697693 48.66697693 48.66697693
ArabWorld   ARB I   FX.OWN.TOTL.YG.ZS   20.95479965 20.95479965 20.95479965
", header = TRUE)

library(dplyr)
library(tidyr)

WDI %>% 
  select(-`IndicatorName`) %>% 
  gather(Year, val,`1960`:`1961`) %>% 
  spread(`IndicatorCode`, val)

答案 1 :(得分:0)

正如已经提到的,当您未在插入中指定列名时,则假定参数与表列的顺序相同。在您的情况下,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);

此外,consider avoiding Parameters.AddWithValue

答案 2 :(得分:-1)

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)