初心者なので拙いところもありますが、よろしくお願いします。
(背景)
VB.net(VB2010)で作成した画面で入力したデータを
DB(SQLserver2003)に取り込もうとしています。
画面は任意のテーブルを指定でき、(プルダウンで選択します)
指定されたテーブル名からテーブル・カラムの情報を取得し、画面に一覧表示します。
一番下の行にデータを手動で追加することができるようにしたいと思っています。
任意のテーブルを指定できるようにしているため、
動SQLを作成しています。
動的SQL文作成のファンクションは下記の通りになります。
'***************start
Private Function CreateInsertCommand(ByVal dt As DataTable) As SqlCommand
'dtには画面から入力された情報と、
'Insert先のテーブルやカラムの情報が設定されています。
Dim cmd As New SqlCommand
Dim SqlStr As String
Dim i As Integer
cmd.CommandText = "INSERT INTO " & dt.TableName & " VALUES ("
'パラメータを配列で定義
Dim param(dt.Columns.Count - 1) As SqlParameter
i = 1
SqlStr = ""
For Each col As DataColumn In dt.Columns
SqlStr = SqlStr & "@p" & i & ", "
param(i - 1) = New SqlParameter("@p" & i, col.ColumnName)
If col.DataType Is System.Type.GetType("System.String") Then
param(i - 1).SqlDbType = SqlDbType.VarChar
Else
param(i - 1).SqlDbType = SqlDbType.Int
End If
param(i - 1).SourceVersion = DataRowVersion.Original
cmd.Parameters.Add(param(i - 1))
'追加 iをカウントアップ
i = i + 1
Next
' 最後に付加したカンマを破棄
cmd.CommandText = cmd.CommandText & Left(SqlStr, Len(SqlStr) - 2) & ")"
cmd.Connection = cnt
CreateInsertCommand = cmd
End Function
'***************end
呼び出し元のは下記の通り記述されています。
'***************start2
Dim oSqlAdap As New SqlDataAdapter("SELECT * FROM " & dt.TableName, cnt)
Try
'各種コマンドを登録します
oSqlAdap.InsertCommand = CreateInsertCommand(dt)
oSqlAdap.Update(dt)
Catch ex As Exception
MsgBox("更新失敗" & vbCrLf & ex.ToString)
End Try
'***************end2
データを追加するテーブルはVarcharとCharのみで構成されるテーブルを使っています。
(問題点・質問内容)
画面から全カラムに値を設定して登録しようとすると、
「文字列データまたはバイナリ データが切り捨てられます。 ステートメントは終了されました。」のエラーが表示されます。
デバッグして追っていくと、
>oSqlAdap.Update(dt)
の実行でエラーとなっています。
恐らく型の変換がうまくいっていないのだと思うのですが、
どのように解決していけばよいのか手詰まりになっています。
何かおかしいところがあればご教示いただけませんでしょうか。
または、調査すればいいポイントをアドバイスいただけると助かります。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
SQLServer側のテーブル構成を開示してください。
この回答への補足
bin-chan 様
失礼いたしました。
(書くかどうか少し悩んだのですが、やはり書いた方が良かったですね。。)
CREATE TABLE ZAIKO_M (
vNengappi varchar(10) PRIMARY KEY,
vJihunbyou varchar(8) PRIMARY KEY,
vIPAddress varchar(30) PRIMARY KEY,
cSouko char(4),
cSyain char(4),
fNyuuryoku char(1),
cShouhin char(11),
nsuuryou varchar(20)
)
です。
本当はnumericやdatetame型の項目も設定したいのですが、
ひとまずcharとvarcharのみにしています。
ちなみに画面への入力は、数字でも半角英数字でも試しましたがだめでした。
解決できました。
param(i - 1) = New SqlParameter("@p" & i, col.ColumnName)
という設定の方法がまずかったようです。
param(i - 1) = New SqlParameter()
param(i - 1).ParameterName = "@p" & i
param(i - 1).SourceColumn = col.ColumnName
とするとうまくいきました。
気にかけてくださってありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS テーブルに2行目から取...
-
C#でaccdbファイルのテーブルの...
-
エクセルからアクセスにインポ...
-
テーブルのリンク(ACCESS)
-
Accessの接続先をSQLサーバ...
-
アクセスマクロで、csv データ...
-
アクセス2007 エクセルへエク...
-
Access2019でフォームから入力...
-
データを削除しても表領域の使...
-
Viewにインデックスは張れ...
-
SQLでスキーマ名(所有者名)の...
-
ORA-00959: 表領域'****'は...
-
INDEXの無効化
-
datapumpの実行方法について
-
postgreSQLのint型は桁数指定が...
-
他の処理でselectさせないよう...
-
ACCESS 複数テーブル・複数フィ...
-
検索結果の列数を動的に変更したい
-
異なるスキーマからデータを抽...
-
CLOB型へのINSERT
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルからアクセスにインポ...
-
他ファイルのテーブルの情報を...
-
C#でaccdbファイルのテーブルの...
-
(ACCESS)複数mdbからのデータ...
-
ACCESS テーブルに2行目から取...
-
テーブルのリンク(ACCESS)
-
jspのプログラムについて
-
Accessでボタンを押したらエク...
-
アクセスマクロで、csv データ...
-
画面から入力した値がDBに登録...
-
[PG]AccessVBAでファイルのイン...
-
csvをSQLiteに取り込むと文字化...
-
グループ単位にCSVファイル...
-
アクセス初心者に注意点を教え...
-
Access2019でフォームから入力...
-
VBでCSVデータをMDB
-
ACCESSとエクセルのリン...
-
DataGridViewでの変更保存
-
データ読込時のタイムアウト
-
mdbファイルを試しに開いてみた...
おすすめ情報