我试图将产品详细信息插入我的产品表中以进行存储,然后从中选择要显示的内容
我已经尝试过
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转换为数字时出错”
答案 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);
答案 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)