- PR -

fileのUploadについて

1
投稿者投稿内容
hokehoke
会議室デビュー日: 2005/04/05
投稿数: 5
投稿日時: 2005-04-20 13:25
WebMatrixで簡単なFileのDB登録を実験しています。
例えばローカルにあるxlsファイルをDBにBinaryで登録するといったものです。
ソースは以下ですが、エラーで:System.NullReferenceException: オブジェクト変数または With ブロック変数が設定されていません。となります。回避方法はないでしょうか?
-------------------------------------------------
<%@ Page Language="VB" %>
<script runat="server">

Sub objBtn_Click(sender As Object, e As EventArgs)
Dim datum as Object
Dim connectionString As String = "server='(local)'; trusted_connection=true; database='MatrixOrders'"
Dim dbConnection As System.Data.IDbConnection = New System.Data.SqlClient.SqlConnection(connectionString)

Dim queryString As String = "INSERT INTO image_data(title,type,datum) VALUES(@title,@type,@datum)"

Dim dbCom As System.Data.IDbCommand = New System.Data.SqlClient.SqlCommand
dbCom.CommandText = queryString
dbCom.Connection = dbConnection

Dim dbParam_title As System.Data.IDataParameter = New System.Data.SqlClient.SqlParameter
dbParam_title.ParameterName = "@title"
dbParam_title.Value = datum.PostedFile.FileName
dbParam_title.DbType = System.Data.DbType.String
dbCom.Parameters.Add(dbParam_title)

Dim dbParam_type As System.Data.IDataParameter = New System.Data.SqlClient.SqlParameter
dbParam_type.ParameterName = "@type"
dbParam_type.Value = datum.PostedFile.ContentType
dbParam_type.DbType = System.Data.DbType.String
dbCom.Parameters.Add(dbParam_type)

Dim aryData(datum.PostedFile.ContentLength) As Byte
datum.PostedFile.InputStream.Read(aryData,0,datum.PostedFile.ContentLength)

Dim dbParam_datum As System.Data.IDataParameter = New System.Data.SqlClient.SqlParameter
dbParam_datum.ParameterName = "@datum"
dbParam_datum.Value = aryData(datum.PostedFile.ContentLength)
dbParam_datum.DbType = System.Data.DbType.Binary
dbCom.Parameters.Add(dbParam_datum)

dbConnection.Open

dbCom.ExecuteNonQuery

dbConnection.Close

End Sub

</script>
<html>
<head>
</head>
<body>
<form runat="server">
<p id="objBtn">
<input id="datum" style="WIDTH: 274px; HEIGHT: 20px" type="file" size="32" />
</p>
<p>
<asp:Button id="objBtn" onclick="objBtn_Click" runat="server" Text="Upload"></asp:Button>
</p>
</form>
</body>
</html>
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-05-07 05:50
引用:

ソースは以下ですが、エラーで:System.NullReferenceException: オブジェクト変数または With ブロック変数が設定されていません。となります。回避方法はないでしょうか?


 まず、どの部分で発生するのか、特定してください。ソースを張られても、他人のソースを読むのは大変苦労します。
 次に、エラーメッセージをよく読んでください。ASPの時にはオブジェクトという概念がなかったのだと思いますが、まず、オブジェクト指向について勉強しておいてください。

 回避方法は簡単なのですが(参照する前にオブジェクトを作る)、どこで該当する参照をしているのかわからないため、何を作ればいいのかまで示せません。


_________________
hokehoke
会議室デビュー日: 2005/04/05
投稿数: 5
投稿日時: 2005-05-07 10:10
Jitta様ありがとうございます。
そうですね、何をしたいのかを書かなければわかりませんよね。。ソース見てわかれというほうが無謀だと気がつきました^^;すみません。
それで、やりたいことはローカルにあるワード・エクセルのファイルをDBにファイル名・ファイルタイプと一緒に格納したいということです。@ITでVS.NETのやり方が記載されてたのでそれをWebMatrixで試しているところです。オブジェクトの方は一通り勉強してみたのですがHTMLコントロール<input id="datum" type="file">で選択されたローカルファイルをDBに登録するといったものです。それぞれをファイル名:@title,ファイルタイプ:@type,バイナリーファイル:@datumとしてパラメタの値に入れたいのです。
たぶん、Dim datum as Objectとしながらinputオブジェクトとの関連付けがないからなのでしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-05-07 21:44
 AILightさんのところのサンプル

 こちらはVS.NET、C#ですが、「.aspx.csファイル」のコードを「<script runat="server">」内に記述すれば・・・っと、C#からVB.NETへの変換が必要ですね。

 行末のセミコロンを取ってください。
 if文は、「if (式) {...}」ですので、「if 式 Then ... End If」に置き換えてください。
 メソッド宣言も、「アクセスレベル 戻り値 メソッド名(引数) {...}」ですので、「アクセスレベル Sub|Function メソッド名(引数) As 型 ... End Sub|Function」(Subの場合、「As 型」不要)に置き換えてください。
 C#では、変数の宣言は「型 変数名」なので、VB.NET用に「Dim 変数名 As 型」に置き換えてください。
 C#では、文の終わりはセミコロンで、改行は無視されます。セミコロンまでに現れる改行は、すべてつないでください。
 配列は、C#では[]を使います。VB.NET用に、()に置き換えてください。

_________________
1

スキルアップ/キャリアアップ(JOB@IT)