1-) Android RMOS - ÇOK ÖNEMLİ BİLGİ
RETROFİT AYNI ANDA WEB SERVİS GÖNDERİR EĞER VERİ TABANI YÖNETİM CLASIN STATİK OLURSA METOTLARA AYNI ANDA GİRER VE HATAYA SEBEP OLUR BU YÜZDEN STATİK OLMADAN BİR YAPI KURMAMIZ GEREKİR HER İSTEK İÇİN NEW İLE NESNE OLUŞTURUP KENDİ NESNESİNİ KULLANMASI GEREKİR ÖRNEK
using System.Data;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace RmosSayApi.Controllers
{
public class BarkodController : ApiController
{
public HttpResponseMessage GetCari()
{
RHVeritabani veri = new RHVeritabani();// BURASI ÇOK ONEMLI NESNE OLUŞTURUYOR
DataTable dt = veri.MyGetDataTable("select Plan_Id,plan_kod,plan_ad from muh_plan where Plan_Grup=2 and plan_kod like '320%'");
//DataTable dt = new DataTable();
//dt.Columns.Add("ad");
//DataRow dr = dt.NewRow();
//dr["ad"] = "ramazan";
return Request.CreateResponse(HttpStatusCode.OK, dt);
}}}
//////////////RHVeritabani.CS/////////////////////////////
using System;
using System.Data.SqlClient;
using System.Data;
using System.Collections.Generic;
using System.Configuration;
namespace RmosSayApi.Controllers
{
public class RHVeritabani
{
public SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["myConnectionString"].ToString());
public string MyClassIsmi = "RHVeritabani";
SqlTransaction tran;
/// <summary>
/// Veri tabanı bağlantıları için constructor(kurucu metot)
/// </summary>
/// <param name="pServerName"></param>
/// <param name="pVeriTabani"></param>
/// <param name="pUserName"></param>
/// <param name="pPassword"></param>
public void MyServerInfo(string pServerName, string pVeriTabani, string pUserName, string pPassword) // KULLANILMIYOR ARTIK
{ // yüklenince
try
{
con = new SqlConnection("server=" + pServerName + "; Initial Catalog=" + pVeriTabani + ";User id=" + pUserName + ";Password=" + pPassword);
}
catch (Exception ex)
{
Console.WriteLine(MyClassIsmi, "RHVeritabani_C", "Bağlantı Açılamıyor!", ex);
}
}
/// <summary>
/// Transaction başlatır
/// </summary>
public void MyBeginTransaction()
{
try
{
MyOpen();
tran = con.BeginTransaction();
}
catch (Exception ex)
{
Console.WriteLine(MyClassIsmi, "MyBeginTransaction", "Beklenmedik Hata!", ex);
}
}
/// <summary>
/// Transaction kayıt eder
/// </summary>
public void MyCommit()
{
try
{
MyOpen();
tran.Commit();
}
catch (Exception ex)
{
Console.WriteLine(MyClassIsmi, "MyCommit", "Beklenmedik Hata!", ex);
}
}
/// <summary>
/// Transaction iptal eder
/// </summary>
public void MyRollback()
{
try
{
MyOpen();
tran.Rollback();
}
catch (Exception ex)
{
Console.WriteLine(MyClassIsmi, "MyRollback", "Beklenmedik Hata!", ex);
}
}
public void MyOpen()
{
try
{
if (con.State == ConnectionState.Closed)
{ // kapalıysa aç
con.Open();
}
}
catch (Exception ex)
{
Console.WriteLine(MyClassIsmi, "MyOpen", "Bağlantı Açılamıyor!", ex);
}
}
public void MyClose()
{
try
{
if (con.State == ConnectionState.Open)
{ // açıksa kapat
con.Close();
}
}
catch (Exception ex)
{
Console.WriteLine(MyClassIsmi, "MyClose", "Bağlantı Kapatılamıyor!", ex);
}
}
/// <summary>
/// Gelen Sql Sorgusuna Göre Geriye DataTable Döndürür. Tablo Boş veya Sorgu hatalıysa NULL döner
/// </summary>
/// <param name="pSqlText"></param>
/// <returns></returns>
public DataTable MyGetDataTable(string pSqlText) { // datatable boş ise veya hata verirse null döner
try
{
MyOpen();
SqlCommand command = new SqlCommand(pSqlText, con);
SqlDataReader dataReader = command.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(dataReader);
foreach (System.Data.DataColumn col in dt.Columns) col.ReadOnly = false; //
dataReader.Close();
MyClose();
return dt;
}
catch (Exception ex)
{
Console.WriteLine(MyClassIsmi, "MyGetDataTable", "Beklenmedik Hata!", ex);
MyClose();
return null;
}
}
/// <summary>
/// insert,update,delete için Bu metodu kullan! HATALI VEYA YANLIŞ BİLGİ GİRİLİRSE -1 DÖNER
/// </summary>
/// <param name="pSqlText"></param>
/// <returns></returns>
public int MySetQuery(string pSqlText)
{ // insert,update,delete de kullanılır. -1 dönerse hatalı veya yanlış giriştir. aksi durumda başarılı
try
{
MyOpen();
SqlCommand command = new SqlCommand(pSqlText, con);
int value = command.ExecuteNonQuery();
MyClose();
return value;
}
catch (Exception ex)
{
Console.WriteLine(MyClassIsmi, "MySetQuery", "Beklenmedik Hata!", ex);
MyClose();
return -1;
}
}
/// <summary>
/// TOP 1 ile veya SUM,MAX gibi tek alan döndüreceksek kullanılır. Veri yoksa veya hataya düşerse -1 döner
/// </summary>
/// <param name="pDonecekDeger"></param>
/// <param name="pSqlText"></param>
/// <returns></returns>
public string MyGetItem(string pDonecekDeger, string pSqlText)
{ // hatalı veya veri yoksa -1 döner . aksi durumda veri döner. Dikkat tek değer döner "Top 1","id" gibi alanlar için kullan!
try
{
MyOpen();
string DonecekDeger = "-1";
SqlCommand command = new SqlCommand(pSqlText, con);
SqlDataReader dataReader = command.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(dataReader);
if (dt.Rows.Count > 0)
{ //
foreach (DataRow item in dt.Rows)
{
DonecekDeger = item[pDonecekDeger].ToString();
}
}
dataReader.Close();
MyClose();
return DonecekDeger;
}
catch (Exception ex)
{
MyClose();
throw new Exception(ex.Message);
}
}
/******** aşağısını procedure kullancaksan kullan *************/
/*
List<SqlParameter> sp = new List<SqlParameter>(){
new SqlParameter() {ParameterName = "@uArzIst_ad", Value = txtAd.EditValue.ToString() }};
RHVeritabani.MySetQuery_P("uArzIstEkle", sp);
MyGridDoldur();
*/
/// <summary>
/// Procedureli -> insert,update,delete için Bu metodu kullan! HATALI VEYA YANLIŞ BİLGİ GİRİLİRSE -1 DÖNER
/// </summary>
/// <param name="spName"></param>
/// <param name="sp"></param>
/// <returns></returns>
public int MySetQuery_P(string pProcedureName, List<SqlParameter> pSqlParameter = null)
{try
{
MyOpen();
int value = -1;
SqlCommand command = new SqlCommand(pProcedureName, con);
command.CommandType = CommandType.StoredProcedure;
if (pSqlParameter != null)
{
command.Parameters.AddRange(pSqlParameter.ToArray());
}
value = command.ExecuteNonQuery();
MyClose();
return value;
}
catch (Exception ex)
{
Console.WriteLine(MyClassIsmi, "MySetQuery_P", "Beklenmedik Hata!", ex);
MyClose();
return -1;
}
}
/* MySetQuery_P metodunun kullanımı aşağıda "SqlDbType" yazmaya bilirsin sıralamaya dikkat et yeter
List<SqlParameter> sp = new List<SqlParameter>(){
new SqlParameter() {ParameterName = "@uAlanTanim_ad", SqlDbType = SqlDbType.NVarChar, Value= txtAd.EditValue.ToString()},
new SqlParameter() {ParameterName = "@uAlanTanim_durum", SqlDbType = SqlDbType.Bit, Value = radioAktif.Checked}};
RHVeritabani.MySetQuery_P("uAlanTanimEkle", sp);
// SqlDbType olmamış şeklinde
List<SqlParameter> sp = new List<SqlParameter>(){
new SqlParameter() {ParameterName = "@uAlanTanim_ad", Value= txtAd.EditValue.ToString()},
new SqlParameter() {ParameterName = "@uAlanTanim_durum", Value = radioAktif.Checked}};
RHVeritabani.MySetQuery_P("uAlanTanimEkle", sp);
*/
/******** aşağısını transaction kullancaksan kullan ve MyOpen ve Close lar arasına yaz çünkü onlar yok aşağıda *************/
/// <summary>
/// Gelen Sql Sorgusuna Göre Geriye DataTable Döndürür. Tablo Boş veya Sorgu hatalıysa NULL döner
/// </summary>
/// <param name="pSqlText"></param>
/// <returns></returns>
public DataTable MyGetDataTable_T(string pSqlText)
{ // datatable boş ise veya hata verirse null döner
try
{
SqlCommand command = new SqlCommand(pSqlText, con);
command.Transaction = tran;
SqlDataReader dataReader = command.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(dataReader);
foreach (System.Data.DataColumn col in dt.Columns) col.ReadOnly = false;
dataReader.Close();
return dt;
}
catch (Exception ex)
{
Console.WriteLine(MyClassIsmi, "MyGetDataTable", "Beklenmedik Hata!", ex);
return null;
}
}
/// <summary>
/// insert,update,delete için Bu metodu kullan! HATALI VEYA YANLIŞ BİLGİ GİRİLİRSE -1 DÖNER
/// </summary>
/// <param name="pSqlText"></param>
/// <returns></returns>
public int MySetQuery_T(string pSqlText)
{ // insert,update,delete de kullanılır. -1 dönerse hatalı veya yanlış giriştir. aksi durumda başarılı
try
{
SqlCommand command = new SqlCommand(pSqlText, con);
command.Transaction = tran;
int value = command.ExecuteNonQuery();
return value;
}
catch (Exception ex)
{
Console.WriteLine(MyClassIsmi, "MySetQuery", "Beklenmedik Hata!", ex);
return -1;
}
}
/// <summary>
/// 1 tane değer döndüren SQL sorgularında Kullanılır. Örn : ID'ye göre Kodunu almak istersek veya TOP 1 ile veya SUM,MAX gibi tek alan döndüreceksek kullanılır.
/// </summary>
/// <param name="pDonecekDeger"></param>
/// <param name="pSqlText"></param>
/// <returns></returns>
public string MyGetItem_T(string pDonecekDeger, string pSqlText)
{ // hatalı veya veri yoksa -1 döner . aksi durumda veri döner. Dikkat tek değer döner "Top 1","id" gibi alanlar için kullan!
try
{
string DonecekDeger = "-1";
SqlCommand command = new SqlCommand(pSqlText, con);
command.Transaction = tran;
SqlDataReader dataReader = command.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(dataReader);
if (dt.Rows.Count > 0)
{ //
foreach (DataRow item in dt.Rows)
{
DonecekDeger = item[pDonecekDeger].ToString();
}
}
dataReader.Close();
return DonecekDeger;
}
catch (Exception ex)
{
Console.WriteLine(MyClassIsmi, "MyGetItem", "Beklenmedik Hata!", ex);
return "-1";
}
}
}
}
2-) retrofitte timeout süresi ayarlama -> ServiceGenerator.java -> son hali bunu kullan
package com.webpos.ramazan.rmos.rmossay.WebServis;
import com.webpos.ramazan.rmos.rmossay.MainActivity;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class ServiceGenerator {
public static String baseUrl = MainActivity.MyWebServis;
public static Retrofit retrofit;
private static Retrofit.Builder builder = new Retrofit.Builder().baseUrl(baseUrl).addConverterFactory(GsonConverterFactory.create());
private static OkHttpClient.Builder httpClient = new OkHttpClient().newBuilder();
public static <S> S createService(Class<S> serviceClass) {
httpClient.connectTimeout(30, TimeUnit.SECONDS);
httpClient.readTimeout(30, TimeUnit.SECONDS);
httpClient.writeTimeout(30, TimeUnit.SECONDS);
builder.client(httpClient.build());
retrofit = builder.build();
return retrofit.create(serviceClass);
}
}