Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Fel men ädå rätt

Postades av 2008-10-12 13:58:50 - Magnus Hallberg, i forum c# (c-sharp), Tråden har 6 Kommentarer och lästs av 1269 personer

Jag lägger till data i en databas och får felmeddelandet "Indatasträngen hade ett felaktigt format.". Produkten läggs ändå in databasen, men är ju tråkigt att få felmeddelandet. Allt skickas inte med, men de värdena är satta till null, så det ska ju inte ha nån betydelse och de får vara null i databasen.

<code>
// .cs
try
{
string name = txtProdname.Text;
string desc = Request.Form["elm1"];
string prodNumber = txtArtNr.Text;
double price = double.Parse(txtPrice.Text);
int quant = int.Parse(txtQuantity.Text);
bool depart = bool.Parse(ddlDepartment.SelectedValue.ToString());
bool catalog = bool.Parse(ddlCatalog.SelectedValue.ToString());
int catID = int.Parse(Request.QueryString["categoryID"].ToString());
int manifactureID = int.Parse(ddlManifacture.SelectedValue.ToString());
bool toPrint = bool.Parse(ddlPrint.SelectedValue.ToString());
int outID = 0;

int result = int.Parse(CatalogAccess.AddProduct(fn, true, name, desc, catID, prodNumber, price, quant, catalog, depart, outID, toPrint, manifactureID).ToString());
lblStatus.Text += "Produkten är sparad";
bindGrid();
}
catch (Exception ex)
{
lblStatus.Text = ex.Message;
}

// DB klassen
public static int AddProduct(string picPath, bool showPic, string name, string desc, int catID, string artNumber, double price, int quant, bool catalog, bool depart, int id, bool toPrint, int manifactureID)
{
DbCommand comm = GenericDataAccess.CreateCommand();
comm.CommandText = "addProduct";

DbParameter param = comm.CreateParameter();
param = comm.CreateParameter();
param.ParameterName = "@picPath";
param.Value = picPath;
param.DbType = DbType.String;
param.Size = 150;
comm.Parameters.Add(param);

param = comm.CreateParameter();
param.ParameterName = "@showPic";
param.Value = showPic;
param.DbType = DbType.Boolean;
comm.Parameters.Add(param);

param = comm.CreateParameter();
param.ParameterName = "@catID";
param.Value = catID;
param.DbType = DbType.Int32;
comm.Parameters.Add(param);

param = comm.CreateParameter();
param.ParameterName = "@name";
param.Value = name;
param.DbType = DbType.String;
param.Size = 50;
comm.Parameters.Add(param);

param = comm.CreateParameter();
param.ParameterName = "@desc";
param.Value = desc;
param.DbType = DbType.String;
param.Size = 2000;
comm.Parameters.Add(param);

param = comm.CreateParameter();
param.ParameterName = "@prodNumber";
param.Value = artNumber;
param.DbType = DbType.String;
param.Size = 50;
comm.Parameters.Add(param);

param = comm.CreateParameter();
param.ParameterName = "@price";
param.Value = price;
param.DbType = DbType.Double;
comm.Parameters.Add(param);

param = comm.CreateParameter();
param.ParameterName = "@quantity";
param.Value = quant;
param.DbType = DbType.Int32;
comm.Parameters.Add(param);

param = comm.CreateParameter();
param.ParameterName = "@manifactureID";
param.Value = manifactureID;
param.DbType = DbType.Int32;
comm.Parameters.Add(param);

param = comm.CreateParameter();
param.ParameterName = "@catalogPro";
param.Value = catalog;
param.DbType = DbType.Boolean;
comm.Parameters.Add(param);

param = comm.CreateParameter();
param.ParameterName = "@toPrint";
param.Value = toPrint;
param.DbType = DbType.Boolean;
comm.Parameters.Add(param);

param = comm.CreateParameter();
param.ParameterName = "@departmentPro";
param.Value = depart;
param.DbType = DbType.Boolean;
comm.Parameters.Add(param);

param = comm.CreateParameter();
param.ParameterName = "@identity";
param.DbType = DbType.Int32;
param.Direction = ParameterDirection.Output;
comm.Parameters.Add(param);

GenericDataAccess.ExecuteNonQuery(comm);
id = Int32.Parse(comm.Parameters["@identity"].Value.ToString());

return id;
}

SP:
ALTER PROCEDURE addProduct
@picPath VARCHAR(150) = null,
@showPic BIT = null,
@catID INT,
@name VARCHAR(50),
@desc VARCHAR(2000),
@prodNumber VARCHAR(50),
@price MONEY,
@quantity INT,
@catalogPro BIT,
@departmentPro BIT,
@colorID INT = null,
@sizeID INT = null,
@manifactureID INT,
@toPrint BIT,
@identity INT OUTPUT
AS
DECLARE @newProdID INT
IF(EXISTS(SELECT productID FROM products WHERE productNumber = @prodNumber))BEGIN
RAISERROR('Det finns redan en produkt med detta artikelnummer!', 16, 1)
RETURN
END

ELSE BEGIN
BEGIN TRAN
IF(@colorID IS NULL AND @sizeID IS NULL)BEGIN
INSERT INTO products(manifactureID, productName, productNumber, productDesc, price, quantity, onCatalogPromotion, onDepartmentPromotion)
VALUES(@manifactureID, @name, @prodNumber, @desc, @price, @quantity, @catalogPro, @departmentPro)
SET @newProdID = @@IDENTITY
IF(@@error <> 0)GOTO noInsert
END
ELSE BEGIN
INSERT INTO products(manifactureID, productName, productNumber, productDesc, price, onCatalogPromotion, onDepartmentPromotion)
VALUES(@manifactureID, @name, @prodNumber, @desc, @price, @catalogPro, @departmentPro)
SET @newProdID = @@IDENTITY
IF(@@error <> 0)GOTO noInsert

INSERT INTO clothesDetails(prodID, sizeID, colorID, quant)
VALUES(@newProdID, @sizeID, @colorID, @quantity)
IF(@@error <> 0)GOTO noInsert
END

INSERT INTO productCategory(productID, categoryID)
VALUES(@newProdID, @catID)
IF(@@error <>0)GOTO noInsert

IF(@picPath is not null)BEGIN
INSERT INTO prodPics(prodID, picPath, showPic)
VALUES(@newProdID, @picPath, @showPic)
IF(@@error <> 0)GOTO noInsert
END
COMMIT TRAN
END

noInsert:
IF(@@error <> 0)BEGIN
ROLLBACK TRAN
RAISERROR('Det gick inte att lägga till produkten', 16, 1)
RETURN
END
</code>


Svara

Sv: Fel men ädå rätt

Postades av 2008-10-12 16:01:39 - Oskar Johansson

Borde du inte få någon information om var det kapsejsar? Btw, lägg all sql i en transaktion eller något så slipper du halvdana grejjer


Svara

Sv:Fel men ädå rätt

Postades av 2008-10-12 18:04:57 - Magnus Hallberg

Det ligger i en transaction
ELSE BEGIN
BEGIN TRAN
IF(@colorID IS NULL AND @sizeID IS NULL)BEGIN


Det är allt jag får som fel. Tycker det är märkligt, brukar ju alltid vara med vad som blir fel och var.

EDIT
Jagtog bort det från try-satsen och får då att det är här det är fel.

id = Int32.Parse(comm.Parameters["@identity"].Value.ToString());


Svara

Sv: Fel men ädå rätt

Postades av 2008-10-12 18:18:56 - Magnus Hallberg

Jag hade ju min vana trogen ändrat nåt nånstans så klart.

I SP satt jag ju @newProdID = @@IDENTITY så returnerade jag det, det jag skulle returnera var ju givetvis @identity


Svara

Sv:Fel men ädå rätt

Postades av 2008-10-13 14:51:48 - Per Hultqvist

id = Int32.Parse(comm.Parameters["@identity"].Value.ToString());

Den raden skulle jag f ö skriva så här :

id = (int)comm.Parameters["@identity"].Value;

Onödigt att först konvertera till sträng och sedan parsa när du redan returnerar ett (boxat) integer...Alternativt så föredrar jag oftast TryParse i st för Parse då det gör det enklare att felhantera:

if (System.Int32.TryParse(comm.Parameters["@identity"].Value, id))
' Gick bra
else
' Gick fel, ej numeriskt, el för stort/litet värde

[Edit: skrev om svaret till C# i st f VB...]


Svara

Sv: Fel men ädå rätt

Postades av 2008-10-13 21:48:15 - Magnus Bergström

varför inte bara returnera @@identity och kalla executescalar() istället för executenonquery()?


Svara

Sv:Fel men ädå rätt

Postades av 2008-10-13 22:03:41 - Fredrik Normén

Kör gärna inte med @@IDENTITY, utan istället med SCOPE_IDENTITY.

SCOPE_IDENTITY ger sista id för det tillfälliga scopet, medans @@IDENTITY inte är begränsat till det tillfälliga scopet, så det innebär att du kan få fel id när frågan är klar.

Mvh Fredrik Normén
MVP - MEET - ASPInsiders

http://weblogs.asp.net/fredriknormen


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 707
27 958
271 751
820
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies