QA@IT
この質問・回答は、@ITの旧掲示板からインポートされたものです。

オブジェクト名 が無効です。(涙)

VB.NETで作成したWebフォームより、以下のソースにてSQLServerにあるテーブル
(sche_data)へのデータ新規登録を実行したのですが、「オブジェクト名 'sche_data'
は無効です。」というエラーが発生します。
同様のソース及び設定をした他のアプリでは新規登録はできるので
原因と解決方法がわかりません。
あまり説明がうまくありませんが、ご教授いただきますようお願いします。

Dim TableName As String = "sche_data"
Dim ds As DataSet = New DataSet

Private Function mysql_c(ByVal SQL As String)
    'SQL文を実行して、結果をデータに収める
    Dim MyCommand As New SqlDataAdapter(SQL, MyConnection)
    MyCommand.Fill(ds, TableName)
End Function 

Private Sub inp_y_btn1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles inp_y_btn1.Click

 Dim SQL As String = "INSERT " & TableName & _
    " (staff_id,yojitu_kbn,tm_start,tm_end,kenmei,naioyu) values ('" & _
    id_Lab1.Text & "','" & _
    yotei_lab.Text & "','" & _
    STime_y1.SelectedValue & "','" & _
    ETime_y1.SelectedValue & "','" & _
    titlebox_y1.Text & "','" & _
    memobox_y1.Text & "')"

    mysql_c(SQL)

 End Sub

*****************************************************************************

○例外の詳細:
System.Data.SqlClient.SqlException: オブジェクト名 'sche_data' は無効です。

○ソース エラー:
行 157: Dim MyCommand As New SqlDataAdapter(SQL, MyConnection)
行 158:
行 159: MyCommand.Fill(ds, TableName)
行 160:
行 161: End Function

○スタック トレース:
[SqlException: オブジェクト名 'sche_data' は無効です。]
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior,
 RunBehavior runBehavior, Boolean returnStream)
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior)
System.Data.SqlClient.SqlCommand.System.Data.IDbCommand.ExecuteReader
 (CommandBehavior behavior)
System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32
 startRecord, Int32 maxRecords, String srcTable, IDbCommand command,
 CommandBehavior behavior)
System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32
 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable)
WebGroupWare2.day_sceh.mysql_c(String SQL) in c:\inetpub\wwwroot\WebGroupWare2
 \day-sche.aspx.vb:159
WebGroupWare2.day_sceh.inp_y_btn1_Click(Object sender, EventArgs e) in
 c:\inetpub\wwwroot\WebGroupWare2\day-sche.aspx.vb:226
System.Web.UI.WebControls.Button.OnClick(EventArgs e)
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBa
 ckEvent(String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,
String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
System.Web.UI.Page.ProcessRequestMain()

*******************************************************************************

質問者:tetsuya11

回答

こんにちわ。諸農です。

Private Function mysql_c(ByVal SQL As String)

    'SQL文を実行して、結果をデータに収める

    Dim MyCommand As New SqlDataAdapter(SQL, MyConnection)

    MyCommand.Fill(ds, TableName)

End Function 

Private Sub inp_y_btn1_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles inp_y_btn1.Click


 Dim SQL As String = "INSERT " & TableName & _

    " (staff_id,yojitu_kbn,tm_start,tm_end,kenmei,naioyu) values ('" & _

上記のコードでは、SqlDataAdapterのFillメソッドが使うSelect文が無いよう
ですが、InsertのSQL文でFillメソッドの呼出→DataSetへのデータ格納が可能
なんでしょうか。。。

あ、でも、

同様のソース及び設定をした他のアプリでは新規登録はできるので

原因と解決方法がわかりません。

ということは、他ではSelect無しのSqlDataAdapterのFill呼出で、Insertの
結果セットがデータソースに合わせるようにDataSet内の指定テーブル
に格納されているんですよね。。。
#Insertの結果セットなんて無いと思いますが。

ちょっと原因追求が難しそうですね。

_________________諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/

投稿者:Jubei

編集 履歴 (0)

ありがとうございます。
諸農さん、無事解決しました。

SqlConnectionプロパィのConnectionStringに
SqlDataAdapterプロパティのSelectCommand/Connection/DynamicPropateis/ConnectionStringの接続文字列を
記述したら解決しました。
ちなみにWeb.configに「<add key="・・・・・・・」、
変更したフォームの"Web フォーム デザイナで生成されたコード"に
「 Dim configurationAppSettings As System.Configuration.Ap
pSettingsReader・・・・・・」が追加されます。(以下を参照しました。)
http://www.microsoft.com/japan/msdn/vs/vb/vbtchcreateyourowndynamicpropertiespreservepropertysettingsinvisualbasicnet.asp

投稿者:tetsuya11

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。