bağlanıyorum server'a açıyorum database'i filan Stored Procedures'a sağ tıklayıp new stored procedure diyorum. yazıyorum create procedure bilmem ne filan diye. sonra kaydediyorum ama oluşmuyor. o stored procedure'ın atında listelenmesi lazım bu yazdığım procedure'ın. orda görünebilmesi, kullanabilmem için bunu bir kere çalıştırmam lazım herhalde ama o nasıl olacak? alter procedure diye bir şey var ya o ne oluyordu? sanki bu create yaptıktan sonra olaan bişeydi.




 

execute edince hata mi aliyorsun? eger almiyorsan stored procedures'e sag tiklayip refresh edersen gorursun yazdigin stp'yi.
alter procedure ise duzenlemek icin iste. edit bir bakima.

sourlemonade

public bool AddArtist(string name, string news, int begin, int end, string town, string genre)
{
if (DBClass.Default.InsertCommand("EXEC AddArtist '" + name + "', '" + news + "', '" + begin + "', '" + end + "', '" + town + "', '" + genre + "'"))
return true;
else return false;
}

sqlserver'da sored predure'u oluşturdum ve save'ledim. sonrasında böyle bir şey yazdığımda false döndürüyor. save'ledikten sonra direk bunu yazmadan önce arada bişey yapmam gerekiyor herhalde. yani önce o procedure'ı derlemem gerekiyor da sonra burda kullanabileyim öyle dğil mi? execute dediğin bu koddaki exec değil de o herhalde. bu procedure'ı nasıl execute edeceğim? procedure da şöyle bişey:

CREATE PROCEDURE [dbo].[AddArtist]
-- Add the parameters for the stored procedure here
@name nvarchar(50),
@news nvarchar(50),
@begin int,
@end int,
@town nvarchar(50),
@genre nvarchar(50)

AS
BEGIN

INSERT INTO dbo.Artists (ArtistName, News, ActiveBegin, ActiveEnd, HomeTown, Genre)
VALUES ( @name, @news, @begin, @end, @town, @genre )

END

tepedeki psychedelic adam

abi, stp procedure calistirmak istiyorsan eger, executeNonQuery kullanman gerekiyor. (yani benim bildigim bu)
(parametleri ekledikten sonra [addParamater ile])
ExecuteNonQuery("AddArtist"); seklinde

edit:
gerci ExecuteNonQuery geriye bir sey dondurmez, o yuzden yine sikinti olabilir. ExecuteScalar da deneyebilirsin o durumda.

sourlemonade

InsertCommand ile yapacaksan direkt INSERT sorgusu yazman gerekiyor. stp calistiramiyorsun.

conn = sql baglantilarin vs;

SqlDataAdapter adp = new SqlDataAdapter();

query = new SqlCommand("INSERT INTO Artists (ArtistName, News, ActiveBegin, ActiveEnd, HomeTown, Genre)" + "VALUES (@name, @news, @begin, @end, @town, @genre)", conn);
query.Parameters.Add("@name", SqlDbType.NVarChar, 50, "name*");
query.Parameters.Add("@news", SqlDbType.NVarChar, 50, "news");
query.Parameters.Add(...) //diger parametreleri de tek tek ekle

adp.InsertCommand = query;

* = tablodaki column adini yaziyorsun oraya.

sourlemonade

şunu da yazmayı unutmuşum bir başka dosyada da şöyle bişey var:

public bool InsertCommand(string queryStr)
{
SqlConnection cnn = new SqlConnection(connectionStr);
try
{
cnn.Open();
}
catch
{
return false;
}
try
{
SqlCommand insert = new SqlCommand(queryStr, cnn);
insert.ExecuteNonQuery();
cnn.Close();
}
catch (Exception ex)
{
return false;
}
return true;
}

yani önceki cevapta yazdığım kodda InsertCommand'e query'i geçiriyorum sonra burda o dediğin işlemi yapıyor. yani yapması lazım aslında ama yapmıyor ki burdan false dönüyor. burdan false dönünce de öteki fonksiyondan false dönüyor.

tepedeki psychedelic adam

ExecuteNonQuery yerine ExecuteScalar yazip dener misin bir orda?

edit: su halimle(yoldan geldim, gayet uykusuzum vs) benden bu kadar o halde, yatiyorum.

sourlemonade

o da olmadı. neyse bakalım.

sağol cevaplar için.

tepedeki psychedelic adam

connection string'te mi bir sorun var acaba. şöyle iki tane şey dendim ama sonuç değişmedi.

connectionStr = "Data Source=serverismi;Initial Catalog=databaseismi;Integrated Security=True";

connectionStr = "database=databaseismi;server=serverismi;uid=kullanıcıism;pwd=\"\"";

burda şifre olmadığı için öyle bişey yazdım pwd'ye. uid bir sayı mı olması lazım? öyleyse nerde yazar?

tepedeki psychedelic adam

uid degil User Id, pwd degil Password olmali. connection string'i wizard ile olusturursan daha saglikli olur ama (veritabanina windows authentication ile mi baglaniyorsun ya da baska turlu mu vs. secme imkanin olur)
en azindan hata riskini en aza indirirsin.

sourlemonade

ilk yazdığım string wizard'ın oluşturduğu. stored procedure filan olmadan direk databaseden bilgi alıp yazmayı denediğimde, (yani hiç kod yazmadan o wizard'ın içinde şunları döndür filan gibi bişey yapılabiliyor) bu string'le bağlanıp değerleri döndürüyor ama stored procedure için başka bişey mi yazmak gerek acaba diye düşünmüştüm.

tepedeki psychedelic adam

InsertCommand fonksyionundaki iki try catch bloğunu kaldırdım sırayla ilkini kaldırdığımda yine false döndürdü. ikincisini kaldırdığımda şöyle hata verdi.

System.Data.SqlClient.SqlException: Could not find stored procedure 'AddArtist'.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at DBClass.InsertCommand(String queryStr) in c:\Documents and Settings\sem\Desktop\Visual\WebSite4\App_Code\DBClass.cs:line 48
at Service.AddArtist(String name, String news, Int32 begin, Int32 end, String town, String genre) in c:\Documents and Settings\sem\Desktop\Visual\WebSite4\App_Code\Service.cs:line 24

stored procedure ulamad diyor. en başta o listede çıkmadığnı söylemiştim orada göremedğinden oluyor herhalde. ya da başka bişey mi acaba? ya da stored procedure'ı yanlış yere mi kaydediyorum acaba nereye kaydetmek lazım?

tepedeki psychedelic adam

ilk aklima gelen olasilik kod icinden yanlis/farkli bir sunucuya baglanmis olabilmen. sql baglantilarini bir kontrol et diyecegim oncelikle.

sourlemonade
1

mobil görünümden çık