[]
mssql & stored procedure
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.
alter procedure ise duzenlemek icin iste. edit bir bakima.
- sourlemonade (25.05.09 02:51:46)
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
{
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 (25.05.09 03:20:14)
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.
(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 (25.05.09 03:25:44 ~ 03:43:08)
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.
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 (25.05.09 03:38:02 ~ 03:41:25)
ş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.
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 (25.05.09 03:40:44)
ExecuteNonQuery yerine ExecuteScalar yazip dener misin bir orda?
edit: su halimle(yoldan geldim, gayet uykusuzum vs) benden bu kadar o halde, yatiyorum.
edit: su halimle(yoldan geldim, gayet uykusuzum vs) benden bu kadar o halde, yatiyorum.
- sourlemonade (25.05.09 03:42:38 ~ 04:01:26)
o da olmadı. neyse bakalım.
sağol cevaplar için.
sağol cevaplar için.
- tepedeki psychedelic adam (25.05.09 03:59:52 ~ 04:03:09)
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?
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 (25.05.09 05:11:24)
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.
en azindan hata riskini en aza indirirsin.
- sourlemonade (25.05.09 09:58:08 ~ 09:58:49)
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 (25.05.09 13:16:40)
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?
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 (25.05.09 15:51:36 ~ 15:58:57)
ilk aklima gelen olasilik kod icinden yanlis/farkli bir sunucuya baglanmis olabilmen. sql baglantilarini bir kontrol et diyecegim oncelikle.
- sourlemonade (25.05.09 17:03:30)
1