2011-01-03 9 views
2

私のプログラムから値をとり、テーブルの特定の列に挿入するストアドプロシージャを作成しようとしました。 ストアドプロシージャの構文が間違っているのを続けるが、その理由を理解できない?プログラムから コード:レコードを更新するSQL Serverストアドプロシージャ

  commandObj.CommandText = "sp_insert_profileDetails" 

      commandObj.Parameters.Clear() 

      Dim m_param As SqlParameter 

      m_param = commandObj.Parameters.Add("@authorId", SqlDbType.NVarChar, 100) 
      m_param.Direction = ParameterDirection.Input 
      m_param.Value = foundProfiles.Item(i) 


      m_param = commandObj.Parameters.Add("@age", SqlDbType.NVarChar, 50) 
      m_param.Direction = ParameterDirection.Input 
      m_param.Value = faceProfileAge.Item(i) 

      m_param = commandObj.Parameters.Add("@gender", SqlDbType.NVarChar, 50) 
      m_param.Direction = ParameterDirection.Input 
      m_param.Value = faceProfileSex.Item(i) 

      m_param = commandObj.Parameters.Add("@locale", SqlDbType.NVarChar, 50) 
      m_param.Direction = ParameterDirection.Input 
      m_param.Value = faceProfileLocation.Item(i) 

      m_param = commandObj.Parameters.Add("@pic", SqlDbType.NVarChar, 100) 
      m_param.Direction = ParameterDirection.Input 
      m_param.Value = faceProfilePic.Item(i) 

      Dim recordsAffected As Integer = commandObj.ExecuteNonQuery 
      Return recordsAffected 



ALTER procedure [dbo].[sp_insert_profileDetails] 
@authorId nvarchar(100), 
@age nvarchar(50), 
@gender nvarchar(50), 
@locale nvarchar(50), 
@pic nvarchar(100) 

AS 
    Begin 
    set nocount on 
    update [dbo].ProfileFeed 
    set [age] = @age, 
     [sex] = @gender, 
     [locale] = @locale, 
     [pic] = @pic 
    where 
     [authorId] = @authorId 
    end 

感謝どのような援助?

+2

エラーは何ですか?ここに貼り付けてコピーできますか? –

+5

あなたの問題とは無関係ですが、sprocにsp_のプレフィックスを付けることは、MSによって推奨されません:http://msdn.microsoft.com/en-us/library/ms190669.aspx –

+1

あなたが何をしているのか正確に分からない限り、難解な点ですそしてなぜ、あなたは本当にプロシージャの前に "sp_"を付けたくないのですか? SQLはすべてのsp_手続きに対して特別な処理を行います。 (詳しい説明はBOLにあります) –

答えて

5

私は

確認するために数行のコードを行方不明、しかし....よ、あなたはcommandObj.CommandTypeがSystem.Data.CommandType.StoredProcedureであることを指定しましたか?

あなたがこれを設定するのを忘れた場合は、.NETはデフォルトでSystem.Data.CommandType.Textとして扱われ、データベースが不正な構文エラーがスローされます。..

+0

私はそれをやることを忘れていました、私は再びそれを試してみましょう...ありがとう..投稿する – vbNewbie

+0

私の喜び。助けになるのはうれしい。 – David

0

どこにいるか、私は表示されません実際にレコードをデータベースに挿入します。

ストアドプロシージャの状態:

update [dbo].ProfileFeed 
    set [age] = @age, 
     [sex] = @gender, 
     [locale] = @locale, 
     [pic] = @pic 
    where 
     [authorId] = @authorId 
    end 

がまだSPが[dbo].[sp_insert_profileDetails]

命名されますが、代わりに "update" の "insert into [dbo].ProfileFeed" を書くことを意味していましたか?

+0

新しいレコードを追加しようとしていないため、既存のレコード列を更新しようとしています。したがって、authorIdがどこで一致するかは、それらの列を更新する必要がある場所です。 – vbNewbie