2012-03-14 9 views
1

C#を使用して、.NET 4、SQL、Visual Studioの2010とSQL Serverの管理者2008C#のdata.fill(変換に失敗)

こんにちはみんなは、101疑問を解決するのは簡単その同じ古いのように思えるが、何かがあり私を悩ましていた。

私のプログラムはクエリを実行し、データを取得し、データセットを埋めます。私のフィールドの

つのPG(製品群)と呼ばれ、NVARCHAR(255)に設定されています。 ほとんどのpgは30,50,12などの数字ですが、T1Bや50aなどの例外があります。

何らかの理由で変換エラーが発生しています。 「intにvarchar型の値が 『T1B』を変換する際の変換に失敗しました」

私のコードでは、私が使用しているのはdata.fill()です。

は、それは私ですか、それはint型のようなルックスを引っ張る最初のレコードのためdata.fillが整数としてフィールドPGを割り当てるしようとしているかのように、それは思われるのでしょうか? 正直言って、私はいつもfillがSQLデータ型が同等かどうかを模倣すると思っていました。

うまくいけば、それは私が見落としやすいものです。

もっとコードを表示したい場合はお知らせください。この投稿を編集します。

感謝

SQLクエリ

USE [ShaftData] 
GO 
/****** Object: StoredProcedure [dbo].[GetSalesParetotemp] Script Date: 03/14/2012  09:30:13 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[GetSalesParetotemp] 
@acct varchar(255), 
@From date, 
@Too date 
AS 
SELECT i.Acct, 
    i.Name, 
    i.Document, 
    i.Part, 
    i.Qty, 
    i.Unit, 
    dbo.NEWPareto.Pareto, 
    i.pg, 
    dbo.MyPgTable.PgName, 
    i.[DateTime] 

FROM 
OPENQUERY(SACBAUTO, 'SELECT dbo.iHeads.acct, 
          dbo.iHeads.name, 
          dbo.iLines.Document, 
          dbo.iLines.Part, 
          dbo.iLines.Pg, 
          dbo.iLines.Qty, 
          dbo.iLines.unit, 
          dbo.iHeads.[DateTime] 
        FROM Autopart.dbo.iheads INNER JOIN  Autopart.dbo.iLines ON 
        Autopart.dbo.Iheads.document = autopart.dbo.iLines.document 
        GROUP By dbo.iHeads.acct, 
          dbo.iHeads.name, 
          dbo.iLines.Document, 
          dbo.iLines.Part, 
          dbo.iLines.Pg, 
          dbo.iLines.Qty, 
          dbo.iLines.unit, 
          dbo.iHeads.[DateTime] 
         ') i 
left JOIN 
    dbo.NEWPareto 
ON 
i.Part collate SQL_Latin1_General_CP1_CI_AS = dbo.NEWPareto.Part 
left JOIN 
dbo.MyPgTable 
ON 
    i.pg collate SQL_Latin1_General_CP1_CI_AS = dbo.MyPgTable.[pGroup] 

WHERE 
(i.[DateTime] BETWEEN @From AND @Too) AND 
i.Acct = @acct 
AND i.pg != 60 
AND i.pg != 61 
AND i.pg != 62 

GROUP BY i.Acct, 
    i.Name, 
    i.Document, 
    i.Part, 
    i.Qty, 
    i.Unit, 
    dbo.NEWPareto.Pareto, 
    i.pg, 
    dbo.MyPgTable.PgName, 
    i.[DateTime] 

そして、ここではそれはvarchar型 'に言及ので、私は、それがクエリ自体によって引き起こされるSQLエラーだと信じてい

try 
     { 
      string myConn = "Server=derp;" + 
          "Database=derp;" + 
          "uid=derp;" + 
          "pwd=derp;" + 
          "Connect Timeout=120;"; 

      string acct;// test using 1560 

      SqlConnection conn = new SqlConnection(myConn); 
      SqlCommand Pareto = new SqlCommand(); 
      BindingSource bindme = new BindingSource(); 
      SqlDataAdapter adapt1 = new SqlDataAdapter(Pareto); 
      DataSet dataSet1 = new DataSet(); 
      DataTable table1 = new DataTable(); 

      acct = Acct; 

      string fromDate = this.dateTimePicker1.Value.ToString("MM/dd/yyyy"); 
      string tooDate = this.dateTimePicker2.Value.ToString("MM/dd/yyyy"); 

      Pareto.Connection = conn; 
      Pareto.CommandType = CommandType.StoredProcedure; 
      Pareto.CommandText = "dbo.GetSalesParetotemp"; 
      Pareto.CommandTimeout = 120; 

      Pareto.Parameters.AddWithValue("@acct", acct); 
      Pareto.Parameters.AddWithValue("@from", fromDate); 
      Pareto.Parameters.AddWithValue("@too", tooDate); 

      SetCheckBoxValue(true); 
      SetPictureBoxVisibility(true); 
      //label1.Visible = true; 
      adapt1.Fill(dataSet1, "Pareto"); 
      //label1.Visible = false; 
      SetCheckBoxValue(false); 
      SetPictureBoxVisibility(false); 

      SetDataGrid(true, dataSet1, "Pareto", DataGridViewAutoSizeColumnsMode.AllCells); 

      dataGridView1.AutoResizeColumns(
       DataGridViewAutoSizeColumnsMode.AllCells); 
     } 
     catch (Exception execc) 
     { 
      MessageBox.Show("Whoops! Seems we couldnt connect to the server!" 
          + " information:\n\n" + execc.Message + execc.StackTrace, 
          "Fatal Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); 
     } 
+0

関連するコードを貼り付けることはできますか? :) –

+0

問題はありません。ここではクエリとここにそれを使用するメソッドがあります – lemunk

答えて

2

それを呼び出す方法です.Netの問題であれば、 'string'と言います。

具体的に:

WHERE 
(i.[DateTime] BETWEEN @From AND @Too) AND 
i.Acct = @acct 
AND i.pg != 60 
AND i.pg != 61 
AND i.pg != 62 
それは

あなただけの文字列にそれらを変えることができる非数値pg値を持つ行の1つに遭遇したときに句が破壊され

- すなわち'60''61''62'

+0

ホーリーデルプ私はそれがアドバイスのためにSQLのおかげでかなり見落とされた単純なものだと知っていました!病気に行って試してみて、結果を更新してください – lemunk

関連する問題